0

そのため、C++ プログラムで奇妙なエラー メッセージが表示されます。現在、ビジュアル スタジオ (2012 年) を使用しています。数字の1桁おきに加算するプログラムがあるので、1234567は7 + 5 + 3 + 1 = 16のようになります。次に、加算されていないすべての数字を取り、emを2倍してemを加算します。次に、最初の結果 (16) を合計し、2 番目の結果に追加します。これが私のコードです:

#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;
}
4

2 に答える 2

2

前方宣言 (および呼び出し) を行いました:

int sumNonDigits(int);

しかし、あなたは定義しました:

int sumNonDigits(string cardNumber)

一方を他方に合わせて変更する必要があります。


両方を次のように変更した場合:

int sumNonDigits(string cardNumber)

これにより作業が減る可能性がありますが、ここで呼び出しを変更する必要があります。

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

[std::]string...ではなくを渡します。cardNumberこれはlongです。おそらく、入力文字列inは適切な置換であるかcardNumberまたはstring. あなただけが選ぶことができます!

于 2013-02-25T01:43:58.713 に答える
0

int sumNonDigits(string cardNumber)but 宣言がありint sumNonDigits(int);ます。あなたはラインで電話sumNonDigits(int)しています...

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

...しかし、定義がないため、未解決の外部です。

今のところ関数宣言を完全に避け、関数本体を最初の使用点の上に置くことをお勧めします。

于 2013-02-25T01:46:00.553 に答える