gpt4 book ai didi

C++ STL 比较映射找不到(运算符==)

转载 作者:行者123 更新时间:2023-11-30 02:26:13 26 4
gpt4 key购买 nike

我正在尝试比较两个 std::map,但编译器拒绝它,因为它找不到 (==) 运算符。

1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\utility(275):错误 C2678:二进制“==”:未找到采用左手操作数的运算符类型为“const foo::Value”(或没有可接受的转换)

下面是一个例子。

namespace foo {
struct Key { int k; };
struct Value { int val; };
typedef std::map<Key*,Value> Map;
}

bool operator==(const foo::Value &v1, const foo::Value &v2)
{
return v1.val == v2.val;
}
bool operator!=(const foo::Value &v1, const foo::Value &v2)
{
return !(v1 == v2);
}

bool compare(foo::Map &to, const foo::Map &from)
{
return to != from;
}
  1. 如果我去掉命名空间,它就可以工作。

  2. 如果将 == 运算符定义为成员,它会起作用。

例如:

struct Value {
int val;
bool operator==(const Value &v) const { return val == v.val; }
bool operator!=(const Value &v) const { return val != v.val; }
};
// elide the other == and !=

我做错了什么?对于我的情况,我希望 (==) 函数在编译单元本地而不是在接口(interface)中。

最佳答案

如果您将运算符放在命名空间 foo 中,那么它就可以工作。

关于C++ STL 比较映射找不到(运算符==),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43146321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com