我正在开展一个小型的课程作业,所以我把它全部放在一个文件中.现在它变得更大了,我正在尝试单独编译main,函数和类(所以所有类都在一个.h和一个.cpp中)我有一个B类,它是很多其他类的父类在文件中排在第一位.其中一个数据成员现在没有工作,我正在使用单独的编译,这会导致许多错误.
在.h
class A; class B { public: B (){} A* myptr; void whatever(); vector myAs; //this one is the problem };
在.cpp
void B::whatever() { vector newvector; //no problem! myptr = &something; //no problem! for (vector::iterator iter = myAs.begin(); iter != myAs.end(); ++iter) { //error! } }
我得到错误:"myAs未在此范围内声明"或"B类没有成员myAs".
我已经包含了
这不仅仅是vector
.这是std::vector
因为它在名为的命名空间内std
.这就是编译器呻吟的原因.它不知道是什么vector
意思.说std::vector
而不是.
不要不加using namespace std;
现在到因为这个头.如果您愿意,可以将赋值放入.cpp文件以保存键入.但是将这样的一行放入标题是一个非常糟糕的主意:因为你不知道将来哪些文件需要你的标题.随着包含标题的文件数量随着时间的推移而增长,情况很快就会失控.因此,标题应仅包含它真正需要的名称和标题,以便尽可能少地引起名称冲突 - 而该using namespace std;
行将使所有名称std
直接可见.