CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

请各位高手帮忙调试一下这个程序!!

楼主caocao81(曹孟德)2003-12-02 15:54:51 在 C/C++ / C++ 语言 提问

/*--静态成员变量--*/  
   
  #include   <iostream.h>  
   
  class   shared  
  {  
  private:  
  static   int   a; /*--Build   failed--*/  
  int   b;  
  public:  
   
  void   set(int   i,int   j){a=i;b=j;}  
  void   show();  
   
  };  
  void   shared::show()  
  {  
  cout<<"This   is   static   a:"<<a;  
  cout<<"\nThis   is   non-statick   b:"<<b;  
  cout<<"\n";  
  }  
   
  void   main()  
  {  
  shared   x,y;  
   
  x.set(1,1);  
  x.show();  
     
  y.set(2,2);  
  y.show();  
   
  x.show();  
  }  
   
  这段程序编译能通过,运行时出现错误,内容如下:  
  --------------------Configuration:   main   -   Win32   Debug--------------------  
  Linking...  
  main.obj   :   error   LNK2001:   unresolved   external   symbol   "private:   static   int     shared::a"   (?a@shared@@0HA)  
  Debug/main.exe   :   fatal   error   LNK1120:   1   unresolved   externals  
  Error   executing   link.exe.  
   
  main.exe   -   2   error(s),   0   warning(s)  
  这是为什么?? 问题点数:50、回复次数:8Top

1 楼inline(★ 虚函数【虚英语】☆)回复于 2003-12-02 16:03:01 得分 10

在类定义外加一句!因为静态成员在类外要有定义!  
  int   shared::a   =   0;Top

2 楼wu_apple(吴冰)回复于 2003-12-02 16:13:12 得分 0

nod  
   
  Top

3 楼RedFoxC(赤狐)回复于 2003-12-02 16:25:07 得分 10

静态成员   a   没有初始化,当然出现错误拉!  
   
  在函数main()   的前面,初始化     int   shared::a=0;   即可!!Top

4 楼caocao81(曹孟德)回复于 2003-12-02 22:05:48 得分 0

各位高手,听了各位建议后可以运行了,但谁能详细回答一下我的这个问题我马上结贴.即:  
  我看在C++   primer一书中有这样的说法,静态成员在没有初始化时是会自动的被初始化为0的,既然这样,为什么要手动的显示初始化呢?不初始化不行吗?Top

5 楼smalltalk(老徐)回复于 2003-12-02 22:54:35 得分 10

初始化和定义是不同的概念;如果一个成员变量是static,那么它必须在全局定义,至于初始值是什么,要看你定义是负的是什么。  
  C++   primer一书中有这样的说法,静态成员在没有初始化时是会自动的被初始化为0,就是指如果定义时不指定初始值,那就是0.  
  Top

6 楼inline(★ 虚函数【虚英语】☆)回复于 2003-12-03 00:30:52 得分 10

因为静态成员是类及类的所有对象共同维护的一个成员!相当于一个操作受限的全局变量!  
  所以编译器看到类定义中的静态成员引用性声明时会到外部去找这个全局变量!  
  而当你在外部没有实际定义这个静态成员时!会使编译器陷入尴尬!Top

7 楼liquanle()回复于 2003-12-03 01:14:08 得分 10

a   是静态数据,要在类外面初始化用int   类名::数据名=30;来初始化。Top

8 楼langmng(波涛)回复于 2003-12-03 01:44:52 得分 0

UPTop

相关问题

  • 调查一下各位调试程序的方法。
  • 各位大侠,帮忙调试一下下面几个程序吧!!(急!!)
  • 各位高手,请帮一下忙! 谁知道DebugCLR的用法呢? 如何才能调试ASP.NET的程序呢?
  • 请教:各位大哥再帮我调试一下我下面的这段小程序,好吗?谢谢!
  • 请教各位高手: Java 程序怎么调试?
  • 请问各位大侠都用什么调试ASP程序?
  • 给各位说说一般调试程序常用的方法
  • 关于MFC程序调试的问题,请各位帮帮忙!
  • 我想问一下大家是怎样调试jsp程序的?
  • 谁能讲一下怎么用vs.net调试asp.net程序?

关键词

  • show
  • shared

得分解答快速导航

  • 帖主:caocao81
  • inline
  • RedFoxC
  • smalltalk
  • inline
  • liquanle

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo