C++ stl 列出了两个结构交叉引用
C++ stl list two structures cross-reference
我有这样 2 个结构的代码:
#include <list>
using namespace std;
struct Connection;
struct User;
typedef list<Connection> Connections;
typedef list<User> Users;
struct User {
Connections::iterator connection;
};
struct Connection {
Users::iterator user;
};
但是当我尝试编译它时,编译器(C++生成器 XE(向我返回这样的错误 - ">未定义的结构'连接'"。
谁能帮我解决问题?
@ereOn, 结构连接; 结构用户; 结构体连接 { 用户::迭代器用户; }; 类型定义列表连接; 类型定义列表用户;
struct User {
Connections::iterator connection;
};
未定义的结构"用户">
您正在使用不完整的类型作为类型参数来std::list
根据C++标准调用未定义的 bevahior。
§17.4.3.6/2 说,
具体而言,在以下情况下未定义效果:
— 如果在实例化模板组件时将不完整的类型 (3.9( 用作模板参数。
因此,一种解决方案是使用不完整类型的指针。
struct Connection;
struct User;
typedef list<Connection*> Connections; //modified line
typedef list<User*> Users; //modified line
struct User {
Connections::iterator connection;
};
struct Connection {
Users::iterator user;
};
这将起作用,因为指向不完整类型的指针是完整类型,编译器可以知道 Connection* 的大小等于 sizeof(Connection*)
,即使尚未定义Connection
。
编译器会准确地告诉您问题所在,即Connection
已声明但未定义。
您必须将Connection
类型的完整定义放在typedef
之前。
相关文章:
- 在两个结构之间共享数组
- C++ 如何从函数传递两个结构?
- 如何认为两个结构相等,而不管它们的第二个属性如何?
- 使用用户函数在 C++ 中交换两个结构
- 在CPP中互相访问的两个结构
- 如何实现 std::map::查找包含两个结构'Pos'结构的比较逻辑,每个结构包含 x 和 y 坐标
- 当我们在两个结构上使用它时,= 运算符会做什么
- 合并/连接两个结构
- C++(SDL2)中的碰撞函数.如何传递存储在不同向量中的两个结构
- 具有相同名称和不同模板参数的两个结构如何工作
- 复制两个结构指针时出现分段错误
- Xcode 不链接两个结构
- 在两个结构(函子)中理解typedef的作用域
- 如何在c++中比较两个结构字符串
- 设置两个结构体相等后,指针为NULL
- 如何声明具有other类型成员的两个结构体
- 如何在c++中连接两个结构体类型变量
- C++ stl 列出了两个结构交叉引用
- 有两个结构在C++中相互引用彼此的变量
- 为什么我的两个结构数组没有相互作用?