2015-01-10 107 views
0
类型的右侧操作数

首先,是的,这是我正在努力的作业,所以帮助将不胜感激。我们正在用C++编写一个计算器,它应该在+和 - 运算符上有不同的功能。 用'+'表示将两个数字相加(即45 + 54 = 4554)。 用' - '它应该从第二个元素中删除第一个元素的第一个数字(即1217 - 1 = 27)我们应该通过重载+和 - 操作符来实现,我似乎是挣扎着。先谢谢您的帮助!错误C2679:二进制'+':找不到操作符,它需要

class WhackyRPN 
{ 
public: 
    int value; 
    int operator+ (WhackyRPN a[]); 
    int operator- (WhackyRPN s[]); 
    int getValue(); 
    void setValue(int); 
}; 

void WhackyRPN::setValue(int val){ 
    value = val; 
} 

int WhackyRPN::getValue(){ 
    return value; 
} 

int WhackyRPN::operator+ (WhackyRPN a[]){ 
    string combinedNum = to_string(a[1].getValue()) + to_string(a[0].getValue()); 
    int finalNum = stoi(combinedNum); 
    return finalNum; 
} 

int WhackyRPN::operator- (WhackyRPN s[]){ 
    int minusNum; 
    string firstNum = to_string(s[0].getValue()); 
    string secondNum = to_string(s[1].getValue()); 
    string minusString = to_string(minusNum); 
    for (int i = 0; i < firstNum.length(); i++){ 
     if (firstNum.at(0) != secondNum.at(i)){ 
      minusString.at(i) += secondNum.at(i); 
     } 
    } 
    minusNum = stoi(minusString); 
    return minusNum; 
} 

int main() 
{ 

    WhackyRPN stackPos[4]; 

    string indent = "  "; 
    string userInput; 
    stackPos[0].setValue(0); 
    stackPos[1].setValue(0); 
    stackPos[2].setValue(0); 
    stackPos[3].setValue(0); 

    while (1){ 
     system("cls"); 
     cout << "---STACK---" << endl; 
     cout << indent << stackPos[3].getValue() << endl; 
     cout << indent << stackPos[2].getValue() << endl; 
     cout << indent << stackPos[1].getValue() << endl; 
     cout << indent << stackPos[0].getValue() << endl; 
     cout << "CMD: "; 
     cin >> userInput; 

     if (userInput == "exit" || userInput == "Exit" || userInput == "EXIT"){ 
      exit(0); 
     } 
     switch (userInput[0]){ 
     case 'q': 
     case 'Q': 
      exit(0); 
     case 'p': 
     case 'P': 
      stackPos[0] = stackPos[1]; 
      stackPos[1] = stackPos[2]; 
      stackPos[2] = stackPos[3]; 
      break; 
     case '1': 
     case '2': 
     case '3': 
     case '4': 
     case '5': 
     case '6': 
     case '7': 
     case '8': 
     case '9': 
     case '0': 
      stackPos[3].setValue(stackPos[2].getValue()); 
      stackPos[2].setValue(stackPos[1].getValue()); 
      stackPos[1].setValue(stackPos[0].getValue()); 
      stackPos[0].setValue(stoi(userInput)); 
      break; 
     case '+': //combine pos[1] and pos[0]; 
      int finalNum = stackPos[1] + stackPos[0]; 
      stackPos[3].setValue(stackPos[2].getValue()); 
      stackPos[2].setValue(stackPos[1].getValue()); 
      stackPos[1].setValue(stackPos[0].getValue()); 
      stackPos[0].setValue(finalNum); 
      break; 
     case '-': //remove pos[0].firstNum from pos[1] 
      int minusNum = stackPos[0] - stackPos[1]; 
      stackPos[3].setValue(stackPos[2].getValue()); 
      stackPos[2].setValue(stackPos[1].getValue()); 
      stackPos[1].setValue(stackPos[0].getValue()); 
      stackPos[0].setValue(minusNum); 
      break; 
     case '/': //divide pos[1] by pos[0] 
      if (stackPos[0].getValue() == 0){ 
       cout << "Cannot divide by 0" << endl; 
       system("pause"); 
       break; 
      } 
      int endQuotient = stackPos[1].getValue()/stackPos[0].getValue(); 
      stackPos[3].setValue(stackPos[2].getValue()); 
      stackPos[2].setValue(stackPos[1].getValue()); 
      stackPos[1].setValue(stackPos[0].getValue()); 
      stackPos[0].setValue(endQuotient); 
      break; 
     case '*': //multiply pos[1] by pos[0] 
      int endProduct = stackPos[1].getValue() * stackPos[0].getValue(); 
      stackPos[3].setValue(stackPos[2].getValue()); 
      stackPos[2].setValue(stackPos[1].getValue()); 
      stackPos[1].setValue(stackPos[0].getValue()); 
      stackPos[0].setValue(endProduct); 
      break; 
     default: 
      break; 
     } 
    } 

    system("pause"); 
    return 0; 
} 
+0

你的问题到底是什么? – tumdum

+0

对你诚实,并提出相关问题寻求帮助很好,即使它是作业。请注意:在现实世界中,像+/-这样的超负载操作符做非直观操作(与加/减操作无关)将被认为是不好的做法。 –

回答

1

你得到的错误是你所做的,因为确实没有超载,stackPos[1] + stackPos[0]可以解决。你所拥有的唯一的重载是WhackyRPN::operator+(WhackyRPN*);(这是一个指针,即使你已经写了一个数组 - 读herehere。但这与这个问题无关。)签名应该是WhackyRPN::operator+(WhackyRPN)。更惯用的是WhackyRPN::operator+(const WhackyRPN&)。欲了解更多,请阅读这个伟大的answer

+0

这个答案让我了解了如何完成它的正确方向。这个特定的[链接](http://www.cprogramming.com/tutorial/operator_overloading.html)也非常有帮助。非常感谢你指点我正确的方向! – NocFenix

0

int finalNum = stackPos[1].getValue() + stackPos[0].getValue(); 

更换

int finalNum = stackPos[1] + stackPos[0]; 

在你的程序中,你有对象stackPos[]的阵列,其具有拍摄和分别返回整数功能setValue()getValue()。你需要在这里使用getValue()作为数组元素本身不是整数,它们是对象。

这正是您的错误陈述所说的。但是您似乎已经知道,因为您已在*/操作中实施了它。

希望这会有所帮助。

相关问题