我拷!这个可是书上的例程哦。。都这样莫名其妙,可以编译,不能运行??!!!!

wildcatbb 2001-07-27 07:34:35
各位大虾,老鸟:
我想请教一下,下面的程序是用静态函数实现静态变量的初始化为什么
编译无错,但是一运行就报错呢?
#include"iostream.h"

class statc_type{
static int i;
public:
static void setnum(int n){ i=n;}
void show();
};

void statc_type::show()
{
cout<<"i="<<i,"\n";
}


main()
{
static int setnum(100);

statc_type pot;
pot.show();

return 0;
}


vc6.0 环境中。报的错误是:72510.obj : error LNK2001: unresolved external symbol "private: static int statc_type::i" (?i@statc_type@@0HA)
Debug/72510.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

...全文
112 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ptxq 2001-07-27
  • 打赏
  • 举报
回复
静态变量一点要在类外定义一下的。
wmouse 2001-07-27
  • 打赏
  • 举报
回复
同意
darkay 2001-07-27
  • 打赏
  • 举报
回复
我可以肯定你的初始化有问题,首先:你的那句:static int setnum(100);并不是调用你的静态函数,它仅仅表示定义并初始化(100)了一个int型的静态变量setsum。因为你没有使用类作用域限定。其次,要明白声明和定义的区别,声明仅仅表示我有这么个东西存在,定义才是真正为变量分别存储空间的。定义类的时候对成员都仅仅是声明(这也就是为什么在定义成员变量的时候为什么不能赋值),而在定义对象的时候,成员变量才真正分配存储空间。但是,静态成员变量就不一样啦,因为它在不依赖于特定的对象,所以要单独定义一下。
下面是我修改过的代码:
class statc_type{
public:
static int i;
static void setnum(int n){ i=n;}
void show();
};
/*定义静态变量i*/
int statc_type::i;
void statc_type::show()
{
cout<<"i="<<i,"\n";
}

main()
{
/*调用setnum函数*/
statc_type::setnum(100);
/*这个仅仅定义了静态变量setnum*/
static int setnum(100);
statc_type pot;
pot.show();
cout<<setnum<<endl;
return 0;
}
seedundersnow 2001-07-27
  • 打赏
  • 举报
回复

试过了....确实不行....我好菜啊~~~~~~~~~~~~~~~~

wildcatbb 2001-07-27
  • 打赏
  • 举报
回复
请用中文。。。。拜托
wildcatbb 2001-07-27
  • 打赏
  • 举报
回复
seedundersnow
你的这招不行。。。。不信,你自己试试。。。
seedundersnow 2001-07-27
  • 打赏
  • 举报
回复

[from MSDN]
A project that uses function inlining yet defines the functions in a .CPP file rather than in the header file can cause LNK2001.

seedundersnow 2001-07-27
  • 打赏
  • 举报
回复

不对!

ahphone 2001-07-27
  • 打赏
  • 举报
回复
同意!
seedundersnow 2001-07-27
  • 打赏
  • 举报
回复

static int setnum(100); 是什么意思?

试试 statc_type::setnum(100);

tbird 2001-07-27
  • 打赏
  • 举报
回复
The static variable 'i' should be initiated outside the class statc_type
Leemaasn 2001-07-27
  • 打赏
  • 举报
回复
我的qq是:7173874,我在等哦。。。
wildcatbb 2001-07-27
  • 打赏
  • 举报
回复
那只火鸟很厉害哦。。。。谢谢啦~~~可以加我为好友吗?290784

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧