125

以下のコードでこのエラーメッセージが表示されます。

class Money {
public:
    Money(float amount, int moneyType);
    string asString(bool shortVersion=true);
private:
    float amount;
    int moneyType;
};

最初に、デフォルトのパラメーターはC ++の最初のパラメーターとして許可されていないと思いましたが、許可されています。

4

2 に答える 2

278

関数の実装でデフォルトパラメータを再定義している可能性があります。関数宣言でのみ定義する必要があります。

//bad (this won't compile)
string Money::asString(bool shortVersion=true){
}

//good (The default parameter is commented out, but you can remove it totally)
string Money::asString(bool shortVersion /*=true*/){
}

//also fine, but maybe less clear as the commented out default parameter is removed
string Money::asString(bool shortVersion){
}
于 2010-03-30T13:56:02.217 に答える
1

最近、同様のエラーを起こしました。これが私がそれを解決した方法です。

関数プロトタイプと定義を持っているとき。デフォルトのパラメーターは定義で指定されていません。

例えば:

int addto(int x, int y = 4);

int main(int argc, char** argv) {
    int res = addto(5);
}

int addto(int x, int y) {
    return x + y;
}
于 2021-12-31T13:28:47.463 に答える