如何在头文件C++中实现类对象
Posted
技术标签:
【中文标题】如何在头文件C++中实现类对象【英文标题】:How to implement class objects in header file C++ 【发布时间】:2019-07-24 06:12:47 【问题描述】:如何在头文件中实现类对象,以便每次包含头文件时,都可以访问 cpp 文件中的对象?这是我现在的代码:
//motor-config.cpp
#include "core.hpp"
#define create_motor_group(x,y...) Motor_Group x (y)
create_motor_group(fullDrive, frontLeft,rearLeft,frontRight,rearRight);
create_motor_group(leftDrive,frontLeft,rearLeft);
create_motor_group(rightDrive,frontRight,rearRight);
create_motor_group(lift,leftLift,rightLift);
create_motor_group(roller,leftRoller,rightRoller);
//motor-config.h
#include "core.hpp"
extern Motor_Group fullDrive;
extern Motor_Group leftDrive;
extern Motor_Group rightDrive;
extern Motor_Group lift;
extern Motor_Group roller;
但是,当我使用成员函数时,它没有给我任何响应:
//init.cpp
#include "motor-config.h"
void initialize()
llemu::init();
initMove();
leftDrive.move(127);
另一方面,这是可行的。
//init.cpp
void initialize()
Motor_Group test(frontLeft,rearLeft)
llemu::init();
initMove();
test.move(127);
有谁知道我该如何解决这个问题?
【问题讨论】:
“它没有给我回应:”是什么意思。编译、链接时出现硬错误(如果有,那是什么错误)或在运行时执行特定操作? 没有错误。它只是.move()
没有按预期工作。我认为它创建了 Motor_Group 类的空对象。
您确定在您的对象初始化完成后调用了initialize()
,即它是从main()
调用还是从其他对象初始化序列调用?
它是从一个api调用的。
需要查看更多代码。特别是Motor_Group
类及其方法。而对 sklott 问题的正确回答,它是从 api 调用的,并不能回答问题。
【参考方案1】:
这不是完整的答案,因为在您的代码中发生的事情有太多未知数,而是解释了错误的对象创建顺序如何发生。
示例如下:
#include <iostream>
int init();
struct A
A() std::cout << "A constructor" << std::endl;
int a = 5;
;
struct B
B() std::cout << "B constructor" << std::endl;
int b = init();
;
B b;
A a;
B other_b;
int init()
return a.a;
int main()
std::cout << b.b << std::endl << other_b.b << std::endl;
您可能认为输出中的 2 个数字都是 5
,但实际上第一个数字可能是任何东西(根据未定义的行为),只有第二个数字是 5
,因为在这种特殊情况下创建对象的顺序是:
B constructor of b
A constructor of a
B constructor of other_b
但是不同模块之间的对象初始化顺序是不确定的,即你的代码中可以有一个模块在模块motor-config.cpp
中的对象被初始化之前按照一些对象初始化的顺序调用initialize()
。
【讨论】:
以上是关于如何在头文件C++中实现类对象的主要内容,如果未能解决你的问题,请参考以下文章
即使在 XCTest 文件中实现类扩展中的方法后,仍会调用协议的默认实现