概念混乱

时间:2016-11-30 23:57:42

标签: c++

这可能是一个愚蠢的问题。但我没有在程序中得到概念问题。

我想在全局函数中传递类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();
}

1 个答案:

答案 0 :(得分:2)

不要在标题中(类外)声明静态变量,如下所示:

static Child * pointer_Child;

它将在包含标题的每个编译单元中创建一个变量。并且无法从翻译单元外部访问它们。

相反,请设置pointer_Child extern并在CPP中提供如下实现:

部首:

extern Child* pointer_Child;

CPP:

Child* pointer_Child;

永远不要包含CPP文件。