以下代码无法在 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/