我正在阅读C ++编程语言4e。在Default Argument的部分我不明白下面的代码。我尝试编译,但有一个错误。无论如何Bjarne试图解释?
默认参数在函数声明时进行类型检查,并在
通话时间。例如:
class X
{
public:
static int def_arg;
void f(int = def_arg);
// ...
};
int X::def_arg = 7;
void g(X& a)
{
a.f(); // maybe f(7)
a.def_arg = 9;
a.f(); // f(9)
}
错误是:
unresolved external symbol "public: void __thiscall X::f(int)" (?f@X@@QAEXH@Z) referenced in function "void __cdecl g(class X &)" (?g@@YAXAAVX@@@Z)
MS c ++ 2013
答案 0 :(得分:1)
您刚刚声明f
但需要定义f
的正文:
void f(int = def_arg);
例如
void X::f(int)
{
// Do something
}
或
class X
{
// ...
void f(int = def_arg)
{
// Do something
}
};