定义静态成员的默认参数

Default Arguments defining static member

本文关键字:参数 默认 静态成员 定义      更新时间:2023-10-16

我正在阅读C++编程语言4e。在默认参数部分,我不明白下面的代码。我尝试编译,但有一个错误。无论如何,比亚恩想解释什么?
默认参数在函数声明时进行类型检查,并在通话时间。例如:

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

您刚刚声明了f但需要定义f的主体:

void f(int = def_arg);

例如

void X::f(int)
{
   // Do something
}

class X 
{
    // ...
    void f(int = def_arg)
    { 
        // Do something
    }
};

实时代码。