以下代码无法使用g ++ 4.8在C ++ 03和C ++ 11中进行编译
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){}
我一直认为不同命名空间中的类型是不同的类型,无论如何。 但似乎没有。我觉得最后编译器摆脱了namespace / typedef并专注于底层类型并且它发生了冲突。
我是对的吗?你有解决方法吗?
答案 0 :(得分:2)
类型不会存在于命名空间中。 名称。您在类型上重载,而不是在名称上重载。
答案 1 :(得分:1)
typedef
只是同一类型的另一个名称。您只能在不同类型上重载。