这可能是一个愚蠢的问题。但我没有在程序中得到概念问题。
我想在全局函数中传递类Child的指针,并通过包含Child.h来访问项目不同部分的指针对象
问题:当我在main中执行get_Child() - > number_1时,以下问题不起作用。
解决方案:如果我在main中包含Child.cpp,并内联构造函数或 如果我在Child.h中声明构造函数而不是Child.cpp
查询请求。这种行为的原因是什么?我可以如何在Child.cpp中声明构造函数,而不必在main.cpp中包含Child.cpp
的main.cpp
#include <iostream>
#include "Child.h"
//#include "Child.cpp"
using namespace std;
int main(){
Child *pC = new Child();
cout << "direct = " << pC->number_1 << endl;
cout << "with function = " << get_Child()->number_1 << endl;
}
Child.h
#ifndef CHILD_H_
#define CHILD_H_
class Child;
static Child * pointer_Child;
inline void save_Child(Child * p_C){
pointer_Child = p_C;
}
inline Child * get_Child(){
return pointer_Child;
}
class Child {
public:
Child();
//Child(){
// this ->set_Child();
//}
void set_Child(){
save_Child(this);
}
int number_1 = 10;
};
#endif /* CHILD_H_ */
Child.cpp
#include "Child.h"
//inline Child::Child(){
// this ->set_Child();
//}
Child::Child(){
this->set_Child();
}
答案 0 :(得分:2)
不要在标题中(类外)声明静态变量,如下所示:
static Child * pointer_Child;
它将在包含标题的每个编译单元中创建一个变量。并且无法从翻译单元外部访问它们。
相反,请设置pointer_Child
extern
并在CPP中提供如下实现:
部首:
extern Child* pointer_Child;
CPP:
Child* pointer_Child;
永远不要包含CPP文件。