C++ 如何使用具有其他函数的头文件中的结构?

C++ 如何使用具有其他函数的头文件中的结构?,c++,oop,C++,Oop,我在头文件(usefulFunctions.h)中有一个struct(struct People),这个头文件还有一些与该结构无关的函数。 在另一个头文件(购物者.h)中,我试图创建std::vector shopperperstoday,但我得到以下错误 模板参数1无效 std::vector shoppersToday 此范围中未声明人员 我有#在我的购物者.h文件中包含“usefulFunctions.h”,但我不知道为什么它不起作用 ---编辑1--- //usefulFunctions

我在头文件(usefulFunctions.h)中有一个struct(struct People),这个头文件还有一些与该结构无关的函数。 在另一个头文件(购物者.h)中,我试图创建
std::vector shopperperstoday
,但我得到以下错误

模板参数1无效
std::vector shoppersToday

此范围中未声明人员

我有
#在我的购物者.h文件中包含“usefulFunctions.h”
,但我不知道为什么它不起作用

---编辑1---

//usefulFunctions.h
#ifndef有用功能\u H
#定义有用的函数
#包括“购物者.h”
void是noitemsinbag();
结构人{
购物者*shoppee;
};
#恩迪夫
//购物者
#ifndef\u H
#定义购物者
#包括“usefulFunctions.h”
结构人;
阶级购物者{
今天的病媒;
};
#恩迪夫
---编辑2--- 在usefulFunctions.h文件中添加了
#include
,仍然会收到相同的错误

---编辑3--- 在
#include
s之后添加
struct People
,似乎可以解决这个问题。
谢谢大家的反馈。C++中的

,声明只在声明的点下方可见。例如,这是有效的:

struct People { ... };
std::vector<People *> peoplePointers;
这将
People
声明为一个存在的类,从而允许其后的任何代码引用它。假设代码不需要知道类的内容。所以,像这样的事情很好:

struct People;
std::vector<People *> peoplePointers;
struct People { ... };
struct人;
向量指针;
结构人{…};
但这不是:

std::vector<People *> peoplePointers;   // INVALID
struct People { ... };
struct People;
std::vector<People> peoplePointers; // INVALID
struct People { ... };
struct人;
std::vector peoplePointers;//无效的
结构人{…};

因为
std::vector
需要知道
People
实例的大小。

People
在名称空间中吗?不是,我只声明它为struct People{…};请提供一份报告。它应该只包含足够的代码来重现错误,而不是更多。
购物者
未在“usefulFunctions.h”中声明。您是否真的在“购物者.h”中包含了“usefulFunctions.h”?如果是这样,那么您有一个循环include,需要用转发声明来打破它
?只是出于好奇,如果我必须做一些类似于
std::vector peoplePointers
,我应该怎么做?@user7999116:我认为大多数循环依赖性都可以通过某种方式解决。例如,将
std::vector
作为另一个类的数据成员似乎是可以的(出于我不完全理解的原因),只要
People
在需要实例化该另一个类的任何代码之前被完全声明。我认为您真正无法解决的唯一情况是,您希望类的一个实例最终包含同一类的另一个实例。类似于
class A{B;};类B{A;}
永远无法解析,因为这样每个
A
将包含另一个
A
struct People;
std::vector<People *> peoplePointers;
struct People { ... };
struct People;
std::vector<People> peoplePointers; // INVALID
struct People { ... };