gpt4 book ai didi

c++ - 没有运算符 "<"匹配这些操作数操作数类型是 : double < my_class

转载 作者:太空宇宙 更新时间:2023-11-04 11:25:45 25 4
gpt4 key购买 nike

我有两个文件:

my_header.h :

class my_class {
public:
my_class();

my_class(long long number);

my_class(int number);

my_class(double number);

bool operator<(const my_class& rhs) const;

//////
}

my_class.h :

my_class::my_class()
{
//implementation
}

my_class::my_class(long long number)
{
//implementation
}

my_class::my_class(int number)
{
//implementation
}

my_class::my_class(double number)
{
//implementation
}

bool my_class::operator<(my_class const& rhs) const
{
//implementation
}

我没看懂,哪里搞错了。我重载运算符 < .另外,我有 constructor来自 double类型。

当然,另外,我通过 this scheme 实现了其他 5 个运算符 ( ==, !=, >, <=, => ) .其他操作符在同一个命名空间中,但它们不是成员函数。

测试用例是:

my_class a = 2;
bool check = 5.17 < long_int1;

最佳答案

C++ 规则禁止使用隐式转换来创建在其上调用成员函数的对象。出于这个原因,一个对象支持隐式转换,通常定义一个二进制作为非成员(member)的运营商(如有必要,请加好友)。为了比较运算符,我有一个简单的模板基类,它将提供它们,假设我的类有一个成员函数 compare,并从它继承。

template <typename T>
class ComparisonOperators
{
friend bool operator==( T const& lhs, T const& rhs )
{
return lhs.compare( rhs ) == 0;
}
friend bool operator!=( T const& lhs, T const& rhs )
{
return lhs.compare( rhs ) != 0;
}
friend bool operator<( T const& lhs, T const& rhs )
{
return lhs.compare( rhs ) < 0;
}
// and so on.
};

你写一次,然后你所要做的就是提供一个(成员(member))函数,并从中派生:

class MyClass : public ComparisonOperators<MyClass>
{
public:
int compare( MyClass const& other ) const
{
// return <, == or > 0, according to whether this is
// <, == or > other.
}
}

关于c++ - 没有运算符 "<"匹配这些操作数操作数类型是 : double < my_class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26768360/

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