当前位置: 技术问答>linux和unix
下面的程序为什么提示undefined referenc to ...p 解决了立刻给分
来源: 互联网 发布时间:2015-11-15
本文导语: #include class test { public: static int p; int i; }; class subTest : public test { public: int sub; void testf() { p = 2; printf("%dn", p); } protected: private: }; int main() { subTest mo; mo.testf(); return 0; } 使用gcc编译的时候提示 undefin...
#include
class test
{
public:
static int p;
int i;
};
class subTest : public test
{
public:
int sub;
void testf()
{
p = 2;
printf("%dn", p);
}
protected:
private:
};
int main()
{
subTest mo;
mo.testf();
return 0;
}
使用gcc编译的时候提示 undefined reference to test::p
class test
{
public:
static int p;
int i;
};
class subTest : public test
{
public:
int sub;
void testf()
{
p = 2;
printf("%dn", p);
}
protected:
private:
};
int main()
{
subTest mo;
mo.testf();
return 0;
}
使用gcc编译的时候提示 undefined reference to test::p
|
在int main()外面写
int test::p;
静态成员变量的初始化一定要在主函数外面,而且静态成员变量一定要初始化。
事实上test::p并不属于test,将他作为test的成员只是为了确定访问的权限
|
声明、定义、初始化、赋值,这些是不同的概念。
类的静态成员变量逻辑上是属于该类的所有实例的,所以不能在初始化某个实例(如自动变量或new分配)时分配内存空间,因此必须显式地定义。当然,必须是全局的定义,即thethefighter(龙卷风)第二次说的int test::p。
类的静态成员变量逻辑上是属于该类的所有实例的,所以不能在初始化某个实例(如自动变量或new分配)时分配内存空间,因此必须显式地定义。当然,必须是全局的定义,即thethefighter(龙卷风)第二次说的int test::p。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。