Я получаю это сообщение об ошибке с приведенным ниже кодом:
class Money {
public:
Money(float amount, int moneyType);
string asString(bool shortVersion=true);
private:
float amount;
int moneyType;
};
Сначала я подумал, что параметры по умолчанию не разрешены в качестве первого параметра в C ++, но разрешены.
Ответы:
Вероятно, вы переопределяете параметр по умолчанию в реализации функции. Его следует определять только в объявлении функции.
//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){ }
источник
bool shortVersion
параметр, просто удалите или закомментируйте= true
std::string Money::asString(bool)
. Обратите внимание, что он даже не включает имя параметра. И действительно, вы можете использовать в объявлении другие имена, чем в определении. (Это важно в большом проекте, когда - по каким-либо причинам - вы хотите изменить имя в определении, но не хотите перекомпилировать миллионы строк кода, которые зависят от объявления.)