Ответ 1
Вероятно, вы переопределяете параметр по умолчанию при реализации функции. Он должен быть определен только в объявлении функции.
//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){
}