我有使用名称空间的代码,其中有几个,我的大脑中有一些混乱。
如果我有类似这样的东西:
#include <vector>
protected:
vector<registeredObject> mRegistryList;编译器抱怨向量没有类型
我就不能这么做吗:
#include <vector>
protected:
std::vector<registeredObject> mRegistryList;或者我需要做的是:
using namespace std;
#include <vector>
protected:
std::vector<registeredObject> mRegistryList;使用多个名称空间的正确方法是什么,等等?
发布于 2010-02-05 12:44:46
我假设上面的代码是在一个类中。在这种情况下,您需要#2。实际上,您应该避免在头部中使用#3,这当然是类定义所在的位置。否则,当您对头文件执行#include操作时,您将会对由此产生的名称空间冲突感到非常不安。
发布于 2010-02-05 12:43:58
后两种可能性中的任何一种都会起作用。如果你关心的话,还有第三个:
using std::vector;
protected:
vector<registeredObject> mRegistryList;其中,using namespace std;通常被建议不要使用--它会拖入大量的名称,其中一些您根本不知道,所以它很容易与您自己的代码中的各种东西发生冲突。大多数人使用显式限定名称,比如:std::vector...版本。
发布于 2010-02-05 12:44:46
编译器抱怨向量没有类型
这是因为在全局名称空间中没有名为vector的类。由于您在定义向量时没有指定任何名称空间,因此编译器无法找到该类。
你的第二个选择很好。在这里,您告诉编译器vecror类驻留在std名称空间中。
在第三个选项中,mRegistryList的定义中的std::是不必要的,因为您已经通过using std;语句包含了名称空间。我觉得using语句污染了名称空间(尤其是在头文件中使用时),所以我更喜欢第二种选择。
https://stackoverflow.com/questions/2205080
复制相似问题