所以我尝试在自己的.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;
答案 0 :(得分:5)
编译main.cpp
时,编译器只能看到#include
d的内容文件。这意味着它只能看到struct People;
这是一个前向声明,而不是一个完整的定义。声明std::vector<People>
需要知道People
结构实际有多大,因此编译器需要查看整个定义。
您需要将整个struct People { ... };
定义放入people.h
。 (你可以将定义复制并粘贴到main.cpp
中,但是对结构有多个定义是一个非常糟糕的主意,因为很难让它们保持同步。)
如果仅需要在指针的上下文中使用该结构或引用它,那么结构的前向声明很有用。
答案 1 :(得分:0)
您必须在* .H文件中定义结构和类,并在所需的* .CPP文件中包含标头。 * .CPP中定义的结构是文件本地的。