c++ - 在 specyfing 命名空间之后通过指针内联声明对象

标签 c++ pointers object namespaces

当我输入这个时:

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/

相关文章:

C++ 元编程 : A template parameter which *must* inherit an abstract class

c - 将灵活的数组成员分配为结构

c - 在 C 中处理多个函数中的指针

javascript - 通过比较属性将第二个数组与第一个数组合并,如果对象不属于第二个数组,则将属性添加到第一个数组中的对象

javascript - 访问单个 Json 对象中的元素

c++ - fread() 无法读取 Dev-Cpp 中的文件数据

c++ - 如何使用对象的指针调用对象的成员函数?

c++ - 使用 Eclipse 编译 xerces-c++ 程序

c - Swift/C 互操作,Swift 中的结构数据更改未在 C 中更新

c# - .NET/C# : Is it possible to replace one object in memory with another?