我有一个名为'Card'的类和一个名为'CardDeck'的类,在'CardDeck.h'中定义了以下促销:
CardDeck(Card card){cards.push_back(card);}
CardDeck有一个朋友运营商+:
friend CardDeck operator+(const CardDeck, const CardDeck);
适用于:
CardDeck+CardDeck
CardDeck+Card
Card+CardDeck
但它不适用于卡+卡。我明白了:
"no match for 'operator+' (operand types are 'Card' and 'Card')"
为什么在这种情况下卡片不会被提升为CardDecks? 我还尝试使用:
重写operator +friend CardDeck operator+(const Card, const Card);
但这也不起作用。 任何暗示为什么?
谢谢!
答案 0 :(得分:3)
虽然适合我!
class A
{
public:
A() {}
};
class B
{
public:
B(A sth) {}
};
B operator+(const B x, const B y)
{
return B(A());
}
using namespace std;
int main()
{
A x;
B y(x);
y + y;
x + y;
y + x;
x + x;
return 0;
}
没有错误需要未使用的参数和表达式。
答案 1 :(得分:1)
我认为黑摩西的部分正确。看起来您正在使用friend关键字声明类中运算符的实现。这会产生您正在谈论的编译错误,即您似乎正在执行以下操作:
class B
{
public:
B(A sth) { ... }
friend int operator+(const B x, const B Y)
{
return 0;
}
};
如果你使用Black Moses在他的例子中所做的事情,并将以下内容添加到你的班级中:
friend int operator+(const B x, const B y);
然后编译错误就消失了。总结一下:在类定义中声明操作符是友元函数,然后在类外声明实现,如下所示:
int operator+(const B x, const B y)
{
return 0;
}
希望这有帮助。
答案 2 :(得分:0)
谢谢保罗!
a