概念上的混乱

Conceptual confusion

本文关键字:混乱 概念上      更新时间:2023-10-16

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

我想通过包括CHILP。>

问题:当我在main中进行get_child() -> number_1时,以下问题不起作用。

解决方案:如果我将child.cpp包括在主中,然后嵌入式构造函数或如果我在孩子中声明构造函数。h而不是child.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();
}

请勿在类似类的标题(外部)中声明静态变量:

static Child * pointer_Child;

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

相反,制作pointer_Child extern并在CPP中提供实现:

标题:

extern Child* pointer_Child;

cpp:

Child* pointer_Child;

,永远不会包括CPP文件。