在自己的.cpp中定义一个结构,然后在main中使用它

时间:2012-03-31 22:08:32

标签: c++

所以我尝试在自己的.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;

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:0)

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