c++ - 基于命名空间 typedefs 原始类型的成员函数重载

标签 c++ namespaces overloading typedef

以下代码无法在 C++03 和 C++11 中使用 g++ 4.8 进行编译

namespace N {typedef int A;}
namespace NN {typedef int A;}

struct Z
{
    void foo(N::A){}
    void foo(NN::A){}
};

错误是

d.cpp:7:10: erreur: ‘void Z::foo(NN::A)’ cannot be overloaded
     void foo(NN::A){}};
          ^
d.cpp:6:6: erreur: with ‘void Z::foo(N::A)’
 void foo(N::A){}

我一直认为不同命名空间中的类型无论如何都是不同的类型。 但似乎不是。我觉得最后编译器摆脱了命名空间/typedef 并专注于底层类型并且它发生了冲突。

我说得对吗?您有解决方法吗?

最佳答案

类型不存在于命名空间中。 名字 可以。您重载类型,而不是名称。

关于c++ - 基于命名空间 typedefs 原始类型的成员函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26870373/

相关文章:

c++ - 链表复制构造函数的正确实现

c++ - 错误的模板参数数量(3,应该是 4)

php - 为什么我不能在 PHP 中重载构造函数?

c# - c#静态和非静态方法之间的区别是什么?

C++重载==比较来自不同类的对象

c++ - 异常已处理,但在被捕获后程序被中止

c++ - 在类似于 unix shell 脚本的 c++ 中调用后台函数

c++ - 命名空间中类的前向声明

javascript - WinJS.Namespace.define 不工作

php - 使用命名空间找不到类