【问题标题】:Defining a struct in its own .cpp then using it in main在自己的 .cpp 中定义一个结构,然后在 main 中使用它
【发布时间】:2012-03-31 22:08:31
【问题描述】:

所以我尝试在它自己的 .cpp 文件中定义一个结构(用于组织或其他),然后我在头文件中声明它,将头文件包含在 .cpp 文件中,然后将头文件包含在 main.cpp 中并尝试创建结构的向量,但它不起作用。但是,我随后将结构的定义放入 main.cpp 中,它确实起作用了。这只是我不知道的结构的一个怪癖,它们需要在使用它们的文件中定义(出于某种原因)?这是代码:

//people.h
struct People;

//people.cpp
#include people.h
struct People
{
std::string name;
int age;
};

//main.cpp
#include"people.h"
#include<vector>
std::vector<People> list;

【问题讨论】:

    标签: c++


    【解决方案1】:

    在编译main.cpp时,编译器只能看到#included的内容文件。这意味着它只能看到struct People;,这是一个前向声明,而不是完整的定义。声明 std::vector&lt;People&gt; 需要知道 People 结构实际上有多大,因此编译器需要查看整个定义。

    您需要将整个struct People { ... }; 定义放入people.h。 (您可以将定义复制并粘贴到main.cpp,但是拥有多个结构定义是一个非常糟糕的主意,因为很难让它们保持同步。)

    如果您需要在指针或引用的上下文中使用该结构,则结构的前向声明很有用。

    【讨论】:

    • 啊,所以当你在头文件中转发声明函数时,在另一个 .cpp 文件中定义它们(包含头文件)并将它们包含在 main.cpp 中它的工作方式不同吗? (基本上就像我的问题中的代码,但使用函数而不是结构)
    • 对,当你调用一个函数时,编译器不需要知道函数inside是什么。链接器只是在编译步骤之后将它们连接起来。 (但是,当您使用 C++ 模板函数时,通常必须将 那些 放在头文件中。)
    【解决方案2】:

    您必须在 *.H 文件中定义结构和类,并在所需的 *.CPP 文件中包含头文件。 *.CPP 中定义的结构是文件本地的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-14
      • 2014-12-18
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      相关资源
      最近更新 更多