繁体   English   中英

C ++创建双向链接的类

[英]C++ creating doubly-linked classes

我有两个类,都需要链接到彼此的对象。 这是一些示例代码来显示我的问题:

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

我的另一堂课:

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

我不确定我应该如何在彼此的文件中同时包含两个类。 在两个文件中都包含另一个类的内容导致我遇到问题。 最好,我只想将两个对象都放在一个文件中,因为它们的标头每个都只有几行代码,但这会导致在文件中首先声明的任何类上出错,因为另一个类的标头不是在此之前 它给我一个无效的类型错误。

使用前向声明

//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
}

一个好的模式是使用前向声明来打破标头或类定义之间的依赖关系循环,并使您想知道您的设计是否可以改进。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM