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