在C ++中访问姐妹对象的成员变量

时间:2013-11-24 10:59:08

标签: c++ oop

我正在尝试访问位于父类(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;
    }

};

3 个答案:

答案 0 :(得分:1)

您可以使用forward class declarationsfriend关键字

答案 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