CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

类的static变量与函数

楼主pyhjy()2001-04-10 17:31:00 在 VC/MFC / 基础类 提问

我在类中的定义如下  
  static   double   m_TotalMoney;  
  static   char   m_MultiPay[128];  
  static   SetTolalMoney(double   AllMoney){m_TotalMoney=AllMoney;}  
  static   SetMultiPay(char   *   ThePay)   {strcpy(m_MultiPay,ThePay);}  
  但我在类中使用  
  CCasher::SetTolalMoney(m_dGpayall);    
  时总是  
  error   LNK2001:   unresolved   external   symbol   "public:   static   double     CCasher::m_TotalMoney"   (?m_TotalMoney@CCasher@@2NA)  
  Debug/CASH.exe   :   fatal   error   LNK1120:   1   unresolved   externals  
  Error   executing   link.exe.  
  为什么?我该如何定义static变量、函数,如何使用他们?  
  问题点数:30、回复次数:8Top

1 楼theSky(云霄)回复于 2001-04-10 18:12:00 得分 10

举个例子:  
   
  在a.h文件中:  
  class   A  
  {  
  public:  
      A()   {}  
      ~A()   {}  
   
      static   void   Set(int   n)   {   m_n   =   n;   }  
   
  protected:  
      static   int   m_n;  
  }  
   
  在a.cpp(或别的cpp)文件中:  
   
  int   A::m_n   =   0;                         <==   你少了这一行。Top

2 楼panda_w(好想睡啊!)回复于 2001-04-10 18:14:00 得分 10

很多书上都有的:  
  类的静态成员是为类的全体服务,这一点与非静态成员函数不同.也就是说它的生命周期类似于全局函数.  
  例如:  
  class   CMyClass  
  {  
      static   s_Func()   {NULL;}  
      Func()   {NULL;}  
  };  
   
  ...  
  CMyClass::s_Func();   //   OK  
  CMyClass::Func()     //   error!!!,   一般成员函数必须由具体的对象调用  
  CMyClass   a;  
  a.Func();     //   OK,   就象这样才行  
   
  静态成员函数不同访问一般的数据成员,只能访问静态数据成员,也只能调用其他的静态成员函数.  
  静态成员函数没有this指针.   Top

3 楼ggyy(带着一堆光棍找朋友!)回复于 2001-04-10 18:54:00 得分 0

aTop

4 楼yemagxy(把酒言欢)回复于 2001-04-10 19:13:00 得分 0

类的静态成员变量不可以在类的构造函数和文件的头文件中进行初始化,因为可能会造成多次初始化,必须在main函数中或全局函数中或者任何函数之外进行初始化。如果你没有进行这样的初始化,就会出现你提到的链接错误。你可以看看《深入浅出MFC》第2章,讲的很清楚。Top

5 楼pyhjy()回复于 2001-04-11 10:06:00 得分 0

我在类外声明静态数据成员以便为其分配存储空间,可编译后却说变量已经定义  
  double   CCasher::m_TotalMoney;  
  char   CCasher::m_MultiPay[128];  
  "public:   static   double     CCasher::m_TotalMoney"   (?m_TotalMoney@CCasher@@2NA)   already   defined   in   Casher.obj  
  "public:   static   char   *     CCasher::m_MultiPay"   (?m_MultiPay@CCasher@@2PADA)   already   defined   in   Casher.obj  
  为什么?应该如何做?Top

6 楼pyhjy()回复于 2001-04-11 13:44:00 得分 0

help   help......Top

7 楼loutingyv(打倒轮子)回复于 2001-04-11 15:18:00 得分 0

 
  把声明放到c文件中试试  
  我以前也有同样的问题。Top

8 楼In355Hz(好象一条狗)回复于 2001-04-11 19:15:00 得分 10

double   CCasher::m_TotalMoney   =   0;  
  char   CCasher::m_MultiPay[128]   =   {   0   };  
  放到相关的*.cpp文件中去。定义不变。  
  这两个函数这样写:  
  static   SetTolalMoney(double   AllMoney){CCasher::m_TotalMoney=AllMoney;}  
  static   SetMultiPay(char   *   ThePay)   {strcpy(CCasher::m_MultiPay,ThePay);}Top

相关问题

  • 突然糊涂了:类的static成员函数不能访问非static的成员变量,也不能调用非static的成员函数吧?
  • 脚本函数里面怎么申明static变量
  • 怎样在static成员函数中使用非static成员变量?
  • 谁能给我讲讲static变量和static 函数有什么作用
  • 用哪个函数可以判断变量的数据类型?
  • 如何屏蔽父类中的某个函数或者变量
  • 访问其他类的变量和函数
  • 巨菜的问题:类中的某一函数中定义的static型变量是否由该类的所有实例共享?
  • 如果一个函数中使用static局部变量,怎样才能使函数具有可重入性.
  • 变量分配函数

关键词

  • totalmoney
  • ccasher
  • 类
  • static
  • double

得分解答快速导航

  • 帖主:pyhjy
  • theSky
  • panda_w
  • In355Hz

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

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