C ++:静态数据成员已重新初始化

问题描述 投票:-1回答:1

我有以下代码:

///A.h///
namespace mySpace
{
 class A
 {
  public: 
   A();
   static void registerFunc(QString type, FcnPtrType ptr);

  private:
  static QHash<QString, FcnPtrType> myFunctions;

}

////A.cpp///

namespace mySpace
{
 QHash<QString, FcnPtrType> A::myFunctions;

 A::A()
 {
   cout << "size during construction " << myFunctions.size();
 }
 void A::registerFunc(QString type,FcnPtrType ptr)
 {
   myFunctions[type] = ptr;
   cout << "size during registration " << myFunctions.size();
 } 
}

创建A类的任何对象之前都会调用registerFunc。在寄存器功能内,qhash mFunctions的大小为预期的1。但是,当创建该类的对象(第一个也是唯一的对象)时,其大小等于0。因此,输出>>

size during registration 1
size during construction 0

我期望构造函数中的大小保持不变,因为静态数据成员已经被初始化。我想念什么?

我有以下代码:///A.h///名称空间mySpace {类A {公共:A();静态无效registerFunc(QString类型,FcnPtrType ptr);私人:静态QHash ...] >>

c++ qt static-variables static-initialization
1个回答
0
投票

您的代码将无法编译,因为名称空间的{未关闭。但是即使那样,我也无法重现您所描述的问题。参见this example-我只是用一个整数替换了哈希图。

如Slava所述,张贴适当的可复制示例可能会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.