【问题标题】:Default argument for a class function defined in constructor [duplicate]构造函数中定义的类函数的默认参数[重复]
【发布时间】:2020-09-04 02:56:29
【问题描述】:

是否有可能定义一个变量作为构造函数中的默认参数?

#include <iostream>
class Foo
{
public:
    Foo(int x) { num = x;}
    void print(int y = num)
    {
        std::cout << y << std::endl;
    }
private:
    static int num;
};
int main()
{
    Foo f(5);
    f.print();
}

这编译但我得到链接错误LNK2001 unresolved external symbol "private: static int Foo::num" (?num@Foo@@0HA)

【问题讨论】:

  • 那么,如果我理解正确的话是不可能的?
  • 如果 num 不是静态的,你可以这样做。
  • @IlyaS 当 num 不是静态时我得到a nonstatic member reference must be relative to a specific object

标签: c++ oop static-variables static-initialization default-arguments


【解决方案1】:

有可能,你只需要在类外声明/初始化静态变量:

Live demo

#include <iostream>

class Foo
{ 
    //..
};

int Foo::num; //<-- or 'int Foo::num = 0;'

int main()
{
    //...
}

【讨论】:

  • 是的,但这仍然是硬编码的,我希望 num 是用户定义的
  • @SzymonO,你只需要在类外声明/初始化它,值不必使用,用户可以定义,见demo代码。
  • 哦,好的,我现在明白了。非常感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
  • 2010-12-10
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多