我正在尝试访问位于父类(TestClassOne.h)内的对象(TestClassThree.h)内的变量。每个类都在自己的文件中,当我尝试导入文件来实例化它时,它会崩溃。我怀疑是因为导入循环。我不认为我可以使用前向类声明,因为这将限制对变量的访问。如何从TestClassTwo中访问TestClassThree中的变量?
//--TestClassOne.h--
#include "TestClassTwo.h"
#include "TestClassThree.h"
class TestClassOne {
public:
TestClassTwo *myVariable;
TestClassThree *mySecondVariable;
TestClassOne() {
myVariable = new TestClassTwo(this);
mySecondVariable = new TestClassThree();
}
};
//--TestClassTwo.h--
#include "TestClassOne.h" //<-- ERROR
class TestClassTwo {
public:
TestClassOne *parent;
TestClassTwo(TestClassOne *_parent) : parent(_parent) {
}
void setValue() {
parent->mySecondVariable->mySecondVariable->value = 10;
}
};
答案 0 :(得分:1)
您可以使用forward class declarations
和friend
关键字
答案 1 :(得分:1)
尝试添加所谓的include guard(参见this SO question)。在TestClassOne.h
中,在文件的顶部和底部添加以下行:
#ifndef TESTCLASSONE_H
#define TESTCLASSONE_H
[...]
#endif
也将此添加到TestClassTwo.h
,但将预处理器宏的名称更改为TESTCLASSTWO_H。
答案 2 :(得分:0)
herzbube和patato都回答了你的问题:
1 - 使用#ifndef / #define宏避免“包含循环”,就像herzbube解释一样
2 - 使用正向类声明告诉编译器在
之后定义一个类// 1- avoid "include loops"
#ifndef TESTCLASSONE_H
#define TESTCLASSONE_H
// 2- Forward classes declarations
class TestClassTwo;
class TestClassThree; // assuming TestClassThree needs TestClassOne.h
class TestClassOne{
...
};
#endif