ERROR : undefined reference to classname::member_variable

ERROR : undefined reference to classname::member_variable

无法打印 static int 变量的值

我想在此上下文中检查静态变量的值。

我正在使用 www.codechef.com/ide 作为 IDE:C++14 (Gcc 6.3) 作为语言 + 编译器。

代码:

#include <iostream>
using namespace std;

class Demo_StaticVar
{
    public :
    static int a;

    Demo_StaticVar()
    {
      cout<<a<<endl;
    }

};

int main()
{
  Demo_StaticVar obj1;



  return 0;
}

错误:

/home/ptnn1S/ccl6RBkR.o: In function `main':

prog.cpp:(.text.startup+0xf): undefined reference to `Demo_StaticVar::a' collect2: error: ld returned 1 exit status

截图:

static int a;

声明静态变量。这告诉编译器该字段存在并且类型为 int。这是编译代码的有用信息。

但变量仍然需要定义。那是一些翻译单元(并且恰好是一个翻译单元)需要为这个变量分配内存。参见 What is a "translation unit" in C++

对于声明和定义的其他 NIT,请检查此问题:What is the difference between a definition and a declaration?

至于解决方案,您还需要在 class 之外添加定义:

int Demo_StaticVar::a;
int main(){
... 

代码link:https://ideone.com/l7ie7p

摘录: 当一个数据成员被声明为静态时,只为 class.

的所有对象维护一份数据副本。

静态数据成员不是给定 class 类型对象的一部分。因此,静态数据成员的声明不被视为定义。

来源:https://msdn.microsoft.com/en-us/library/b1b5y48f.aspx