在我从main.cpp文件中获取此类并将其拆分为.h和.cpp后,编译器开始提示我在void中使用的默认参数。
/* PBASE.H */
class pBase : public sf::Thread {
private:
bool Running;
public:
sf::Mutex Mutex;
WORD OriginalColor;
pBase(){
Launch();
Running = true;
OriginalColor = 0x7;
}
void progressBar(int , int);
bool key_pressed();
void setColor( int );
void setTitle( LPCWSTR );
bool test_connection(){
if(Running == false){
return 0;
}
else{
return 1;
}
return 0;
}
void Stop(){
Running = false;
if(Running == false) Wait();
}
};
/* PBASE.CPP */
// ... other stuff above
void pBase::setColor( int _color = -1){
if(_color == -1){
SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ),FOREGROUND_INTENSITY | OriginalColor);
return;
}
SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ),FOREGROUND_INTENSITY | _color);
}
和错误,取自VC2010
最佳答案
您只需要在声明中指定参数的默认值,而不必在定义中指定。
class pBase : public sf::Thread {
// ....
void setColor( int _color = -1 );
// ....
} ;
void pBase:: setColor( int _color )
{
// ....
}
成员函数参数的默认值可以输入声明或定义,但不能同时输入。引用自ISO/IEC 14882:2003(E)8.3.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
根据提供的标准示例,它实际上应该按照您的方式工作。除非您完成like this,否则实际上不应该得到该错误。我无法确定为什么我的解决方案在您的情况下确实有效。我想可能与Visual Studio有关。