[英]Defining a struct in its own .cpp then using it in main
因此,我尝试在自己的.cpp文件中定义一个结构(用于组织或其他组织),然后将其在标头中声明,将标头包含在.cpp文件中,然后在main.cpp中包含标头,并尝试创建一个struct的向量,并且它不起作用。 但是,然后我采用了该结构的定义,并将其放入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;
编译main.cpp
,编译器只能看到#include
d的内容文件。 这意味着它只能看到struct People;
这是一个前向声明,而不是完整的定义。 声明std::vector<People>
需要知道People
结构实际上有多大,因此编译器需要查看整个定义。
您需要将整个struct People { ... };
定义为people.h
。 (您可以将定义复制并粘贴到main.cpp
,但是具有结构的多个定义是一个非常糟糕的主意,因为很难使它们全部保持同步。)
如果仅在指针或对其引用的上下文中使用该结构,则结构的前向声明很有用。
您必须在* .H文件中定义结构和类,并在所需的* .CPP文件中包含标头。 * .CPP中定义的结构是文件本地的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.