所以我在我的c ++程序中收到了一个奇怪的错误信息。目前正在使用视觉工作室(2012)。我有一个程序,它添加一个数字的每个其他数字,所以1234567将像7 + 5 + 3 + 1 = 16,然后我取所有未添加的数字并将em乘以2并添加em。然后我将第一个(16)的结果加起来并将其添加到第二个结果中。这是我的代码:
#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;
}
答案 0 :(得分: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
。只有你可以选择!
答案 1 :(得分:0)
您有int sumNonDigits(string cardNumber)
但声明int sumNonDigits(int);
。您在行中致电sumNonDigits(int)
...
total = sumAltDigits(cardNumber) + sumNonDigits(cardNumber);
...但这是一个未解决的外部因为没有定义。
我建议暂时避免使用函数声明,并将函数体放在第一个使用点之上。