继承和静态变量

Bru*_*uce 1 c++

这是我的代码 -

#include <iostream>
#include <conio.h>

using namespace std;

class Base
{
public:
int a;

};

//int Base::a = 5;

class Derived : public Base
{

public:
int static a;
};

int main()
{
   Derived d;
   cout<<d.a;
   getch();
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在这里得到一个链接器错误.但是,当我以相反的方式做到这一点时 -

class Base
{
public:
int static a;

};

int Base::a = 5;

class Derived : public Base
{

public:
int a;
};
Run Code Online (Sandbox Code Playgroud)

我没有错.有人可以解释一下这里发生了什么.

Pat*_*ick 6

必须在类外部显式定义/初始化所有静态成员.

在第二个示例中,您正确执行此操作(int Base :: a = 5),但在第一个示例中,您不对Derived :: a执行此操作,在第一个示例中添加以下行应解决它:

int Derived::a = 5;
Run Code Online (Sandbox Code Playgroud)

  • Derived :: a简单地取代Base :: a,就像在代码块中定义变量i一样,会覆盖块外的同名变量.这是完全合法的.考虑使用静态代码分析工具(如PCLint)来发现这种难以发现的问题. (2认同)