Необходимо указать значения по умолчанию для аргументов только в объявлении, но не в определении.
class pBase : public sf::Thread {
// ....
void setColor( int _color = -1 );
// ....
} ;
void pBase:: setColor( int _color )
{
// ....
}
Значение по умолчанию для аргумента функции-члена может идти в объявлении или определениино не оба.Цитата из ИСО / МЭК 14882: 2003 (E) 8.3.6
6) За исключением функций-членов шаблонов классов, добавляются аргументы по умолчанию в определении функции-члена, которое появляется вне определения классана набор аргументов по умолчанию, предоставляемых объявлением функции-члена в определении класса.Аргументы по умолчанию для функции-члена шаблона класса должны быть указаны в первоначальном объявлении функции-члена в шаблоне класса.[Пример:
class C {
void f(int i = 3);
void g(int i, int j = 99);
};
void C::f(int i = 3) // error: default argument already
{ } // specified in class scope
void C::g(int i = 88, int j) // in this translation unit,
{ } // C::g can be called with no argument
- конечный пример]
В соответствии со стандартным примером, он на самом деле должен работать так, как вы.Если вы не сделали , как это , вы не должны получить ошибку.Я не уверен, почему это сработало в вашем случае с моим решением.Наверное, что-то связано с визуальной студией.