首页 > 解决方案 > 定义静态成员

问题描述

考虑以下代码:

#include <iostream >
using namespace std;

class A
{
private:
    int x;
public:
    A(int _x)  {  x = _x; }
    int get()  { return x; }
};

class B
{
    static A a;
public:
   static int get()
   {  return a.get(); }
};

A B::a(0);

int main(void)
{
    B b;
    cout << b.get();
    return 0;
}

我的书说:

如果我们不使用这行代码A B::a(0),则会出现编译器错误,因为 B 中没有定义静态成员 a。要修复错误,我们需要显式定义a.

但是,我想将对象初始化a为,static A a(0);但它给了我一个编译器错误。有人可以解释为什么我不能以我描述的方式初始化对象 a,以及为什么有必要像他们在书中给出的那样初始化它。

标签: c++objectoopstatic

解决方案


如果要定义a内联,则需要inline它,这可以从 C++17 开始:

class B {
    inline static A a{0};    // or   inline static A a = 0;
public:
    static int get() { return a.get(); }
};

演示


推荐阅读