交叉引用类对象
cross referencing class object
我做了这样的事情:
struct Vertex {
list<Edge*> edges;
};
struct Edge {
Vertex* v1;
Vertex* v2;
};
和编译器错误:
在此范围内未声明"边缘"
如何在不将这两个标题"vertex.h"和"edge.h"放入单独的标头的情况下解决此问题?
在使用 Edge
之前使用前向声明。
struct Edge;
struct Vertex
{
list<Edge*> edges;
};
请注意,当您转发声明一个类型时,编译器将该类型视为不完整类型,它不知道该类型的布局,但它只知道该类型存在,因此如何使用不完整类型存在一些限制。
好读:
何时可以使用前向声明?
您可以转发声明类型:
struct Vertex;
struct Edge {
Vertex* v1;
Vertex* v2;
};
话虽如此,让顶点知道它的边列表对于图形来说可能不是一个好的设计;如果你想在多个图形中重用同一个顶点怎么办?(例如,机场可能是不同人使用的多个不同行程中的合理顶点)。
如果类型通过指针相互使用,则可以在定义另一个之前向前声明其中一个。例如像这样:
struct Vertex;
struct Edge { Vertex* v1; Vertex* v2; };
struct Vertex { list<Edge*> edges; };
相关文章:
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 我们可以有一个 setter 成员函数作为从 const 对象引用的 const 吗?
- C++对象引用返回不同的值
- 对象引用中的字段以不同的方法返回不同的值
- 通过向构造函数其他对象引用页面来创建对象
- 为什么在对象引用恒定时允许更改为另一个类的指针的成员变量
- 如何在C++中读取 HDF5 对象引用
- C++ 未定义的对象引用
- 从函数返回 libconfig 类设置对象引用
- qt vsaddin错误对象引用未设置为对象的istanse
- 在这种情况下,为什么使用 *此必需的对象引用返回对象引用
- 基本C - 构造contaning对象引用,并将其作为方法参数传递
- C :将对象引用作为参数给出错误:呼叫class :: function()的匹配函数
- C++OOP基础知识-是否正确返回对象引用
- 使用对象引用(可能)在调用destructor后使用对象引用
- 创建返回对象引用的成员函数的最简单方法
- 如何在C++上使用对象引用删除对象
- JNI/Android NDK-维护全局对象引用
- 为什么有些类方法返回"*this"(self的对象引用)?
- 在C++中返回伪对象引用的规则