gpt4 book ai didi

c++ - 通过头文件 C++ 使用多个结构

转载 作者:行者123 更新时间:2023-11-28 06:21:45 26 4
gpt4 key购买 nike

很抱歉,如果您以前见过这个问题,但它尚未得到回答,基本上在我的代码中我有两个结构,在单独的 header 中定义并在整个项目中全局使用。我只是希望在其他 cpp 文件中使用这两个结构(同样,它们在两个单独的头文件中定义),而不仅仅是头文件所属的那些文件。这是我测试过的一些示例代码:

class1.h

    #include "class2.h"
#include <vector>
#include <string>

struct trans1{
string name;
};
class class1 {

private:
vector <trans2> t2;

public:
class1();
};

类2.h

    #include "class1.h"
#include <vector>
#include <string>

struct trans2{
string type;
};

class class2{

private:
vector <trans1> t1;

public:
class2();
};

错误日志:

    In file included from class1.h:3:0,
from class1.cpp:1:
class2.h:21:13: error: 'trans1' was not declared in this scope
vector <trans1> t1;
^
class2.h:21:19: error: template argument 1 is invalid
vector <trans1> t1;
^
class2.h:21:19: error: template argument 2 is invalid

我知道这在现实世界的应用程序中是荒谬的代码,但这是我可以演示的最简单的方法。

值得注意的是,如果我简单地注释掉“private:”下的 vector t1 或 t2 的声明,代码将不会失败地编译。这只是我使用第二个结构的事实。

有什么帮助吗?谢谢。

最佳答案

简单地向前声明将要使用的类。将所有实现代码放入一个 cpp 文件中,而不是在 header 中内联。

将 vector 设为私有(private)。这样,包含 header 的任何文件都无法针对不完整的类强制生成代码。

关于c++ - 通过头文件 C++ 使用多个结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29198825/

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