当我输入这个时:
Cat *cat = new Cat();
并放置“using namespace 命名空间;”在顶部,它有效。 但是,如果我尝试这样做:
Namespace :: Cat *cat = new Cat();
这是行不通的。所以,如果有人能解释一下,我将不胜感激。
最佳答案
简答
如果您不编写using namespace Namespace
,则需要在名称Cat
的每 处指定 namespace 。
Namespace::Cat *cat = new Namespace::Cat();
说明
当你在没有命名空间规范的情况下编写 Cat
时,编译器会在当前范围和命名空间中搜索 Cat
,在这种情况下 Cat
位于一个不同的命名空间,因此无法找到它,除非您通过添加 using namespace Namespace;
告诉编译器也查看该命名空间。
您拥有的另一个选择是始终通过在您的类型的每次出现前写入 namespace 来限定其名称,Namespace::Cat
。这样编译器就知道要查找的位置。
通常认为第二种方法更好,因为名称冲突的可能性较小。
参见 Name Lookup有关编译器如何搜索名称的更多详细信息。
关于c++ - 在 specyfing 命名空间之后通过指针内联声明对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32754272/