我在为C ++类成员指定默认值时遇到问题。我的代码是:
来自Someclass.h:
class SomeClass
{
public:
SomeClass();
~SomeClass();
void printOut (bool);
}
...来自SomeClass.cpp:
void SomeClass::printOut(bool foobar=true)
{
if (foobar) { std::cout << foobar << std::endl; }
}
...最后,来自main.cpp:
int main()
{
SomeClass s;
s.printOut();
return 0;
}
然而,这会给出错误消息(gcc):
../main.cpp: In function `int main()':
../main.cpp:8: error: no matching function for call to `SomeClass::printOut()'
../SomeClass.h:18: note: candidates are: void SomeClass::printOut(bool)
subdir.mk:21: recipe for target `main.o' failed
make: *** [main.o] Error 1
我已经尝试将默认值直接指定到头文件中的类声明等。我也尝试过搜索Stack Overflow和Google,但在任何地方都找不到任何解决方案。我做错了什么?
答案 0 :(得分:7)
您没有在标头中指定参数的默认值,编译器正在为您的语句void printOut(void)
寻找签名s.printOut();
的函数,但是没有找到它。你需要的是:
class SomeClass
{
public:
SomeClass();
~SomeClass();
void printOut( bool fValue = true ); // Note change in param in definition
}
在你的cpp中:
void SomeClass::printOut(bool foobar /*=true*/ )
{
if (foobar) { std::cout << foobar << std::endl; }
}
作为旁注,请记住,您不必将参数的注释默认值放在实现文件中,但是可读性是个好主意。
答案 1 :(得分:4)
您需要在类定义中声明默认值,而不是在实现中。
class SomeClass
{
public:
SomeClass();
~SomeClass();
void printOut (bool foobar = true); //move default here
}
void SomeClass::printOut(bool foobar) //remove from here
{
if (foobar) { std::cout << foobar << std::endl; }
}
另外,请注意:
SomeClass s();
不符合您的预期。它不会创建类型为s
的对象SomeClass
,而是声明一个返回类型为s
的函数SomeClass
。 s.printOut();
不应该编译。
你可能想要:
SomeClass s;
答案 2 :(得分:1)
默认值必须在方法声明中指定,而不是在实现中指定。
答案 3 :(得分:1)
必须在标题中定义默认参数,如下所示:
class SomeClass
{
public:
SomeClass();
~SomeClass();
void printOut (bool value = true);
}
答案 4 :(得分:1)
重写如下..注意bool b = false
class SomeClass
{
public:
SomeClass();
~SomeClass();
void printOut (bool b=false);
}
答案 5 :(得分:1)
尝试在头文件中指定默认值:
class SomeClass
{
public:
SomeClass();
~SomeClass();
void printOut (bool foobar=true);
}
答案 6 :(得分:0)
默认值必须在声明中指定,而不是在定义中指定。您可以在两个位置指定默认值,但不能从定义中省略。希望我能混淆你。我将展示e \更正的代码,以便您理解:
class SomeClass
{
public:
SomeClass();
~SomeClass();
void printOut (bool foobar = true);
}
...来自SomeClass.cpp:
void SomeClass::printOut() //or you can use: void SomeClass::printOut(bool foobar=true)
{
if (foobar) { std::cout << foobar << std::endl; }
}
......最后,来自main.cpp:
int main()
{
SomeClass s();
s.printOut();
return 0;
}