我在以下c ++程序中使用operator ==时遇到了一些问题。
#include < iostream>
using namespace std;
class A
{
public:
A(char *b)
{
a = b;
}
A(A &c)
{
a = c.a;
}
bool operator ==(A &other)
{
return strcmp(a, other.a);
}
private:
char *a;
};
int main()
{
A obj("test");
A obj1("test1");
if(obj1 == A("test1"))
{
cout<<"This is true"<<endl;
}
}
if(obj1 == A("test1"))
行有什么问题?任何帮助表示赞赏。
答案 0 :(得分:34)
strcmp
返回0,因此您需要:
return strcmp(a, other.a) == 0;
你也应该使用像CătălinPitiş这样的const
引用在他的回答中说,因为那时你可以使用临时对象与操作符,你也应该自己创建方法const
(因为它没有正如Andreas Brinck在下面的评论中所说,不要修改对象。所以你的方法应该是:
bool operator ==(const A &other) const
{
return strcmp(a, other.a) == 0;
}
答案 1 :(得分:3)
bool operator ==( const A &other)
使用const引用,因此在if语句中构造的临时对象可以用作operator ==的参数。
答案 2 :(得分:2)
在我看来,您希望在运营商中使用此功能:
strcmp(a, other.a) == 0
strcmp
在字符串匹配时返回0,并且数字指示比较是否大于或小于其他。
答案 3 :(得分:-1)
您的错误是您创建了一个即时值并将其作为对operator==
方法的引用传递。但是您的错误在您的运算符定义中应该是:
bool operator ==(const A&amp; other)const
身体是一样的。