C++ 创建双向链接类

标签 c++ class pointers

我有两个类,它们都需要链接到彼此的对象。下面是一些示例代码来说明我的问题:

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

我的其他类(class):

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

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

最佳答案

使用 forward declaration :

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

一个好的模式是使用前向声明来打破 header 或类定义之间的依赖循环,让您想知道您的设计可以改进什么。

关于C++ 创建双向链接类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13207138/

相关文章:

c++ - std::memory_order_relaxed 相对于相同原子变量的原子性

c++ - unique_ptr 用法 - 类图

java - 定义常量的最佳实践 - 内部类或内部接口(interface)?

c++ - 指向动态容器的指针是否持续存在?

c - 访问结构中的数组元素时出错

c++ - 在 Qt 中抓取应用程序外的键盘事件

c++如何按类类型对 vector 进行排序

java - Hadoop:奇怪的 ClassNotFoundException

c++ - C++ 中指针的自动返回类型

c++ - 使用 GetLogicalDriveStrings() 获取未知数据