C ++问题...定义不识别声明中指定的向量

时间:2009-05-11 01:23:49

标签: c++ include compilation vector

我正在开展一个小型的课程作业,所以我把它全部放在一个文件中。现在它变得更大了,我正在尝试单独编译main,函数和类(所以所有类都在一个.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”。

我已经包含了&lt;向量&gt;,如上所示,前向声明的A类,我绝对记得在.cpp的顶部包含.h!是否有关于向量或类的东西以及我不理解的单独编译?这是在Xcode,BTW。

1 个答案:

答案 0 :(得分:5)

这不仅仅是vector。它是std::vector,因为它位于名为std的名称空间内。这就是编译器呻吟的原因。它不知道vector<A*>的含义。请改为std::vector<A*>

由于这个原因,现在将using namespace std;添加到标头中。如果您愿意,可以将赋值放入.cpp文件以保存键入。但是将这样的一行放入标题是一个非常糟糕的主意:因为你不知道将来哪些文件需要你的标题。随着包含标题的文件数量随着时间的推移而增长,情况很快就会失控。因此,标题应仅包含它真正需要的名称和标题,以便尽可能减少名称冲突 - 而using namespace std;行将使std的所有名称直接可见。