基于命名空间typedef原语类型的成员函数重载

时间:2014-11-11 17:05:40

标签: c++ namespaces overloading typedef

以下代码无法使用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并专注于底层类型并且它发生了冲突。

我是对的吗?你有解决方法吗?

2 个答案:

答案 0 :(得分:2)

类型不会存在于命名空间中。 名称。您在类型上重载,而不是在名称上重载。

答案 1 :(得分:1)

typedef只是同一类型的另一个名称。您只能在不同类型上重载。