2013-02-25 74 views
0

,所以我讓我的C++程序一個奇怪的錯誤消息。目前正在使用視覺工作室(2012)。我有一個程序添加了一個數字的其他數字,所以1234567就像7 + 5 + 3 + 1 = 16,然後我把所有非增加的數字和em乘以2並加上em。然後我把第一個(16)的結果加起來並加到第二個結果中。這裏是我的代碼:隨機1無法解析的外部錯誤

#include <iostream> 
#include <cmath> 
#include <string> 
#include <sstream> 

using namespace std; 


int sumAltDigits(int); 
int sumNonDigits(int); 

int main() { 
    long cardNumber; //cardNumber must stay as 'long'. Teacher says so. 
    string in; 
    stringstream ss; 
    int total; 

    cout << "Please enter a chain of integers: "; 
    getline(cin, in); 
    ss.clear(); ss.str(in); 
    while (!(ss >> cardNumber) || (cardNumber < 1)); { 
     cout << sumAltDigits(cardNumber) << endl; 
     //get answer 
     total = sumAltDigits(cardNumber) + sumNonDigits(cardNumber); //this line causes me an error, sumNonDigits(cardNumber) 
    } 
    system("pause"); 
} 

// adds every other digit, starting from the right 
int sumAltDigits(int cardNumber) 
{ 
    if (cardNumber < 10) 
     return cardNumber; 
    return (cardNumber % 10) + sumAltDigits(cardNumber/100); 
} 

// adds digits that were not included in previous step, multiply them by 2, then add all digits in those numbers 
int sumNonDigits(string cardNumber) // I think the error is also being caused by string cardNumber, but if i try to change that, it screws up this function. 
{ 
    int checkSum = 0; 
    int i; 
    for (i = cardNumber.length() - 2; i >= 0; i -= 2) { 
     int val = ((cardNumber[i] - '0') * 2); 
     while (val > 0) { 
      checkSum += (val % 10); 
      val /= 10; 
      cout << checkSum << endl; 
     } 
    } 
    return checkSum; 
} 

回答

2

你向前聲明(呼籲):

int sumNonDigits(int); 

但是你已經定義:

int sumNonDigits(string cardNumber) 

你需要改變一個匹配另一個。


如果你改變他們既要:

int sumNonDigits(string cardNumber) 

這很可能意味着更少的工作,但你需要改變這裏的電話:

total = sumAltDigits(cardNumber) + sumNonDigits(cardNumber); 

...到傳遞一個[std::]string,而不是cardNumber,這是long。也許輸入字符串in將是一個很好的替代品,或者您可能需要to convert cardNumber back to a string。只有你可以選擇!

+0

哦該死!我不能相信我錯過了這一點。呃,當我改變int sumNonDigits(int)到(字符串)時,它說我不能將long cardNumber轉換爲一個字符串cardNumber – 2013-02-25 02:03:11

+0

@Averagekid:不,你需要用'std:'調用'sumNonDigits() :string'。也許'in'就足夠了? – Johnsyweb 2013-02-25 02:09:30

+0

恩,對不起,我對字符串不太瞭解,還挺新的C++。你什麼意思? – 2013-02-25 02:19:25

0

你有一個int sumNonDigits(string cardNumber)但聲明int sumNonDigits(int);。您呼叫的線sumNonDigits(int) ...

total = sumAltDigits(cardNumber) + sumNonDigits(cardNumber); 

...但它是一個未解決的外部,因爲沒有定義。

我建議避免函數聲明完全就目前而言,並把你的函數體上面使用他們的第一個點。

相關問題