C++ 问题...定义不能识别声明中指定的向量
Posted
技术标签:
【中文标题】C++ 问题...定义不能识别声明中指定的向量【英文标题】:C++ question... definition doesn't recognize vectors specified in declaration 【发布时间】:2009-05-11 01:23:48 【问题描述】:我正在做一项从小做起的课堂作业,所以我将所有内容都放在一个文件中。现在它变得更大了,我正在尝试分别编译 main、functions 和 classes(所以所有的类都在一个 .h 和一个 .cpp 中)我有一个类 B,它是很多其他类的父类,并且在文件中排在第一位。由于我正在使用单独的编译,它的一个数据成员现在无法正常工作,这会导致数十个错误。
在.h中
class A;
class B
public:
B ()
A* myptr;
void whatever();
vector<A*> myAs; //this one is the problem
;
在.cpp中
void B::whatever()
vector<A*> newvector; //no problem!
myptr = &something; //no problem!
for (vector<A*>::iterator iter = myAs.begin(); iter != myAs.end(); ++iter)
//error!
我收到错误:“myAs 未在此范围内声明”或“B 类没有成员 myAs”。
我已经包含了
【问题讨论】:
标头中声明 myAs 的代码行是否存在错误消息?还是只有一条与使用 myAs 的 CPP 文件中的代码行相关的错误消息? 顺便说一句,我强烈建议您将代码放入析构函数中,以删除 myAs 中 A* 指向的对象,否则会发生内存泄漏。 【参考方案1】:不仅仅是vector
。它是std::vector
,因为它位于名为std
的命名空间内。这就是编译器抱怨的原因。它不知道vector<A*>
是什么意思。请改用std::vector<A*>
。
不因此现在将using namespace std;
添加到标题中。如果您愿意,可以将作业放入 .cpp 文件以节省输入。但是将这样一行放入标题中是一个非常糟糕的主意:因为您不知道将来哪些文件需要您的标题。随着包括标题在内的文件数量随着时间的推移而增长,这种情况很快就会失控。因此,标头应仅包含它真正需要的名称和标头,以便尽可能减少名称冲突 - 而 using namespace std;
行将使 std
的所有名称直接可见。
【讨论】:
你发现了我最讨厌的一个(程序员将 using 声明放在头文件中)。 +1。 谢谢!我不敢相信我没有想到这一点,因为我确实意识到我必须将字符串更改为 std::string。我不知道向量也受到同样的影响。以上是关于C++ 问题...定义不能识别声明中指定的向量的主要内容,如果未能解决你的问题,请参考以下文章
Intellij IDEA 无法识别 Maven 依赖项中指定的类