2015-01-10 153 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()作爲數組元素本身不是整數,它們是對象。

這正是您的錯誤陳述所說的。但是您似乎已經知道,因爲您已在*/操作中實施了它。

希望這會有所幫助。

相關問題