2013-10-28 48 views
0

我试图在我创建的类中重载运算符<<,该类中创建的类比较两个字符串,而不管大小写。这里是我的布尔运算符在尝试比较字符串时,C++中的运算符重载错误

friend bool operator <<(const string& member, const string& player) { 
    return toLowerCase(member) == toLowerCase(player); 
} 

程序在我的代码

current->name << member 

现在目前这个点返回一个错误是一个指向包含一个字符串名称和成员的节点是一个字符串,它是在提示用户时通过引用传递。我得到的错误是

invalid operands to binary expression('string'(aka'basic_string<char>') and 'string') 
+9

使用''<<一个比较肯定违反了最小惊讶的原则。 – juanchopanza

+0

@juanchopanza和即使使用标准库类型;可怜这个可怜的家伙试图将他的字符串打印到'std :: cout' ... – nijansen

+0

你是如何实现toLowerCase功能的?如果两个字符串相等,则输出 –

回答

1

该错误信息显示它不是拿起你的过载,但试图使用内置位位移操作上string S(和失败,当然)。根据你提供的信息,我不确定为什么。

无论如何,一个更好的主意是使用非成员,非运营商compare()功能 - 使用operator<<比较字符串只是要混淆地狱出任何人在看你的代码(即使你,几年的时间)。

0

举动,声明你的类并删除friend关键字:

bool operator <<(const string& member, const string& player) 
{ 
    return toLowerCase(member) == toLowerCase(player); 
} 

Live code.