gpt4 book ai didi

C++ STL 列出两个结构交叉引用

转载 作者:太空狗 更新时间:2023-10-29 21:06:57 24 4
gpt4 key购买 nike

我有这样的代码有 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++ Builder XE) 返回这样的错误 - “Undefined structure 'Connection'”。

谁能帮我解决我的问题?

@ereOn, 结构连接; 结构用户; 结构连接{ 用户::迭代器用户; }; typedef 列表连接; typedef 列表用户;

struct User {
Connections::iterator connection;
};

未定义结构“用户”

最佳答案

您使用不完整的类型作为 std::list 的类型参数,它根据 C++ 标准调用未定义的行为。

§17 .4.3.6/2 说,

In particular, the effects are undefined in the following cases:
— if an incomplete type (3.9) is used as a template argument when instantiating a template component.

因此,一种解决方案是使用不完整类型的指针。

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

关于C++ STL 列出两个结构交叉引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6226626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com