Otrzymuję ten komunikat o błędzie z poniższym kodem:
class Money {
public:
Money(float amount, int moneyType);
string asString(bool shortVersion=true);
private:
float amount;
int moneyType;
};
Najpierw pomyślałem, że domyślne parametry nie są dozwolone jako pierwszy parametr w C ++, ale jest dozwolone.
Odpowiedzi:
Prawdopodobnie przedefiniowujesz domyślny parametr w implementacji funkcji. Powinien być zdefiniowany tylko w deklaracji funkcji.
//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){ }
źródło
bool shortVersion
parametr, po prostu usuń lub skomentuj= true
std::string Money::asString(bool)
. Zauważ, że nie zawiera nawet nazwy parametru. I rzeczywiście, możesz użyć innych nazw w deklaracji niż w definicji. (Jest to ważne w dużym projekcie, gdy - z jakichkolwiek powodów - chcesz zmienić nazwę w definicji, ale nie chcesz rekompilować milionów wierszy kodu, które zależą od deklaracji.)