superworm1 2016-11-05 07:32 采纳率: 0%
浏览 1303

C++模版类的静态成员变量没有初始化

 class BB
{
public:
BB()
{
printf("BB Creator\n");
fflush(stdout);
}
virtual void DoNothing()
{}
};
typedef BB* (*CreateA)();
CreateA creata = 0;
template<class T>
class A
{
public:
A()
{
printf("A Creator\n");
fflush(stdout);
creata = Create;
}
static BB* Create()
{
return new T();
}
void DoNothing(){}
};
template<class T>
class B : public BB
{
public:
B()
{
printf("B Creator\n");
fflush(stdout);
}
public:
virtual void DoNothing()
{
a.DoNothing();
}
public:
static A<T> a;
};
template<class T>
A<T> B<T>::a;
class C :public B<C>
{
public:
//C() {} 如果加上这句就对了 但是去掉以后似乎父类的构造函数都被优化掉了
};
class D
{
public:
void DFunc()
{
bb = (*creata)();
}
public:
BB* bb;
};
int main()
{
D d;
d.DFunc();
return 0;
}

如果在VS下编译是可以正确执行的
在GCC下则不行 因为作为静态成员的A B::a;没有生成, A的构造函数没有被调用, creata 则为空指针

  • 写回答

1条回答 默认 最新

  • devmiao 2016-11-06 01:02
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)