C ++创建双联课程(C++ creating doubly-linked classes)

2019-10-17 08:32发布

我有两个班这都需要有联系彼此的对象。 下面是一些示例代码,以显示我的问题:

//object1.h
class object1{
    object2 *pointer;
}

我的其他类:

//object2.h
class object2{
    object1 *pointer;
}

我不太确定我应该如何同时包括这两类在对方的文件。 具有包括两个文件中的其他类引起我的问​​题。 最好,我想只是有两个对象在一个文件中,因为他们的标题是唯一的每几行代码,但是这会导致取其类在文件中首先声明一个错误,因为其他类的头是不是前述它; 它给我一个无效的错误类型。

Answer 1:

使用前向声明 :

//object1.h
class object2;
class object1{
    object2 *pointer;
};

//object2.h
class object1;
class object2{
    object1 *pointer;
};

正向声明引入一个不完整的类型 。 总之,它告诉用户定义存在别的地方的编译器。 你必须使用不完全类型一定的局限性,虽然。 由于编译器不知道它的完整定义,它不能做的事情一样从根本上为它分配足够的空间,调用成员函数,检查虚拟表等,你可以做的是刚刚宣布的引用/指针给他们,并通“时间左右:

// Forward declaration
class X;

class Y {
private:
//  X x;    // Error: compiler can't figure out its size
    X &x;    // A reference is ok
public:
    Y(X &x) : x(x) { }

//  void foo() { x.foo(); } // Error: compiler can't invoke X's member
    void bar();
};

// Full declaration
class X {
public:
    void foo() { }
};

void Y::bar()
{
    x.foo(); // Now it is OK to invoke X's member
}

一个好的模式是使用前置声明打破头或类定义之间的依赖循环,让你想知道无论你的设计还有待改进。



文章来源: C++ creating doubly-linked classes