【问题标题】:Overloading operator by using STL utility.h使用 STL utility.h 重载运算符
【发布时间】:2012-07-27 12:40:03
【问题描述】:

在我的代码中,我遇到了 37 个相同类型的错误 c2678; binary 'operator' : 没有定义接受 'type' 类型左侧操作数的运算符(或者没有可接受的转换)

我试图通过重载 == 运算符,包括 STL“实用程序”来消除错误。 http://msdn.microsoft.com/en-us/library/86s69hwc(v=vs.80).aspx http://en.wikibooks.org/wiki/C%2B%2B_Programming/Operators/Operator_Overloading

但这仍然不起作用。任何帮助表示赞赏。

【问题讨论】:

  • 如何包含标头应该为您的类型重载运算符?
  • 我们至少需要看到正在破坏的代码。
  • @yurikilochek:见<boost/operators.hpp>。
  • @BoBTFish 这样吗?包含此标头不会神奇地为您的操作员提供重载。你必须从 boost::operators 继承,即使那样你也必须提供基本的,以便其他的可以按照他们的方式实现。

标签: c++ visual-studio-2010 visual-studio visual-c++


【解决方案1】:

该标头为某些标准类型提供了operator== 的重载,但它不会为您自己的类型神奇地重载它。如果您希望您的类型是相等可比的,那么您必须自己重载运算符,例如:

bool operator==(my_type const & a, my_type const & b) {
    return a.something == b.something
        && a.something_else == b.something_else;
}

// You'll probably want this as well
bool operator!=(my_type const & a, my_type const & b) {
    return !(a == b);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 2012-03-08
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多