处理C ++中的模糊声明

时间:2014-12-30 12:40:36

标签: c++ ambiguous

在我的标题文件中,我定义:

inline t_pair pair(int a, int b) { t_pair p; p.a = a; p.b = b; return p; }

但是我收到编译错误“引用'对'是不明确的”。 显然有一个

struct _LIBCPP_TYPE_VIS_ONLY pair

在utility.cpp中定义,我不直接包含。

有没有办法在没有重命名的情况下仍然使用我的配对功能?

3 个答案:

答案 0 :(得分:3)

如前所述,您可以使用其他命名空间包装函数声明,或者只使用std::pair类并避免使用reinventing the wheel

另请注意,std::pair类允许您创建一对泛型类型。因此,它不仅限于int类型的对。您可以找到其用法here的示例。

答案 1 :(得分:0)

是的,将函数声明放入命名空间:

namespace MyNamespace
{
    inline t_pair pair(int a, int b) { t_pair p; p.a = a; p.b = b; return p; }
}

然后将其称为MyNamespace::pair (a, b)

答案 2 :(得分:0)

您可以(并且可能应该)将您的函数放在命名空间中,但实际上您应该从代码中删除using namespace std,因为std命名空间中有类pair。您不能包含实用程序(其中已定义对),但它可以包含在其他文件中。