多个类依赖项

时间:2011-06-20 02:08:14

标签: c++ oop class-design

我正在尝试创建一个包含两个其他对象的类,并且这些对象应该保持指向它们所包含的类的指针。对于

例如......(我只使用对象实例变量,在最后的想象中有一个类与ClassB非常相似)

这只是我的main.cpp,我想将其包括在内是彻底的......

//Filename: main.cpp
#include "ClassA.hpp"

int main(int argc, char **args) {
    ClassA *a = new ClassA();
    // There would be some more here in the real code
    return 0;
}

现在问题中的课程......

//Filename: classA.hpp
#ifndef CLASSA_H
#define CLASSA_H

#include "ClassB.hpp"

class ClassA {
public:
    ClassA() {
        b = new B(this);
    };
    virtual ~ClassA();

private:
    ClassB *b;
};

#endif //CLASSA_H

现在这是另一个文件......

#ifndef CLASSB_H
#define CLASSB_H

#include "ClassB.hpp"

//Filename: classB.hpp
class ClassB {
public:
    ClassB(ClassA *parent) {
        this->parent = parent;
    };
    virtual ~ClassB();
private:
    A *parent;
};

#endif //CLASSB_H

当我尝试编译它时,我收到错误“错误:ClassA没有命名类型”然后当然是“错误:期望”)'''''令牌之前“ 我的猜测是这与他们有什么关系,包括彼此?

(不确定它是否重要,但在实际代码中,函数实现在包含标题的.cpp文件中。会这样做吗?)

3 个答案:

答案 0 :(得分:3)

我假设这些是拼写错误,但是当你classA时,我可能会误解A *

你需要做的是转发声明类,即。

class ClassA;
class ClassB{
    ...
};

ClassA

相同
class ClassB;
class ClassA{
      ....
};

答案 1 :(得分:1)

添加

class ClassA;
ClassB定义之前的

; 简单的例子:

class B;

class A {
        B * b;
};

class B {
        A * a;
};

int main(int argc, char ** argv) {
        return 0;
}

答案 2 :(得分:1)

你可以通过以下两种方式之一做到这一点;要么你可以使ClassA和ClassB实现一个接口(或者你在C ++中的超类),然后让每个类都有一个定义为接口的指针。第二种方法是在每个类之前使用前向声明(即在定义ClassA之前定义ClassB和ClassB前向声明之前的ClassA前向声明)。