处理C++中模棱两可的声明

Dealing with ambiguous declarations in C++

本文关键字:声明 模棱两可 C++ 处理      更新时间:2023-10-16

在我的头文件中,我定义了:

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

在实用程序.cpp中定义,我没有直接包含。

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

如前所述,您可以使用另一个命名空间包装函数声明,也可以只使用 std::pair 类并避免重新发明轮子。

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

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

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)一样称呼它.

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