2015-03-19 57 views
0

我一直试图在我的程序中使用运算符重载,但是我一直在遇到问题。运算符超载的问题

基本上,我有一个二叉搜索树,我试图得到它,所以如果你输入“tree = tree + 7”之类的东西,它会将键值7添加为一个节点。我一直在与代码尝试做到这一点:

struct addToTree { 
    string treeName; 
    int value; 
    string output; 

    string operator+(string addToTree &lhs, int addToTree &rhs) { 
     addToTree temp; 
     temp.output = lhs.treeName + to_string(rhs.value); 
     return temp.output; 
    } 
}; 

目前,我只是试图让它拿树的名称,并添加到该值是在用户输入要添加到那个树。

我目前收到一些错误,我不认为我的代码甚至接近它应该如此,如果任何人可以给我建议,告诉我我应该做什么,那将是非常感激。

+0

'int addToTree%rhs'?显示你的真实代码。您的'operator +'显示为返回一个'addToTree',但它显然返回了一个'string'。这是真的吗?还是只是另一个错字? – 2015-03-19 10:50:50

+0

这应该是&rhs,但我不知道这是否更有意义,它应该返回一个字符串用于测试目的。我现在修好了。 – user3746428 2015-03-19 10:52:26

+1

这种操作符重载几乎总是有害的。您的操作员应该具有与标准版本相同的语义,否则您和任何后来查看您代码的人都会遇到一些头疼的错误。 “做整数做” – TartanLlama 2015-03-19 10:53:07

回答

0

operator +是一个二元运算符,意味着它获得2个参数作为操作数。 你可以实现它的free函数或成员函数

为成员函数,它只有一个参数,要添加的元素:

returnValue SomeClass::operator + (const SomeType& addee); 

在上面的例子中,第一个加入的元素是总是包含+运算符的对象。

免费功能,增加了两个参数 - 这两个元素你想总结一下:

returnValue operator + (const SomeType1& addee1, const SomeType2& addee2); 

在这里,你混成员函数语法(例如1)具有独立功能(例如2) 你需要你的成员重载只有1个参数(或实现它作为独立函数)。

另外,行(string addToTree &lhs, int addToTree &rhs) 在语法上是错误的string addToTree &lhs是什么意思?这是一个字符串吗?这是别的吗?表达式string addToTree没有意义,因为它不代表任何类型