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 类型对象的一部分。因此,静态数据成员的声明不被视为定义。
无法打印 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 类型对象的一部分。因此,静态数据成员的声明不被视为定义。