C++模板类里的静态成员问题? 400 报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

C++模板类里的静态成员问题? 400 报错

爱吃鱼的程序员 2020-06-04 15:17:12 40

C++模板类里的静态成员问题? 400 报错

    这两天没事找了本《STL源码剖析》看下,可是刚看开头就出问题了,(本人菜鸟)特来请教

问题是这样的,书中有个测试stl_config.h中的各种组态问题,第一个例子

#include <iostream>
using namespace std;

template <typename T>
class testClass
{
public:
	static int _data;
};

int testClass <int>::_data = 1;	//这里出错
int testClass <char>::_data = 2;

int main(int argc, char *argv[])
{
	cout << testClass< int >::_data << endl;
	cout << testClass< char >::_data << endl;
	return 0;
}

在初始化静态变量是出错了

11 5  [Error] specializing member 'testClass<int>::_data' requires 'template<>' syntax

不明白为何出错,必须写为下面这样吗?

template <typename T>
int testClass <T>::_data = 1;

如果是,那岂不是书中出错?(我是菜鸟,觉得这么有名的书,估计没错吧)特来请教!!





C++
分享到
取消 提交回答
全部回答(1)
  • 爱吃鱼的程序员
    2020-06-04 16:20:52
    template<> int testClass <int>::_data = 1; 

    template<> int testClass <char>::_data = 2;

    这样就行了。可能作者的编译器与你的不一样。

    template是编译器差异化比较大的地方。也是我不喜欢C++的原因之一。

    template把事情搞得非常之复杂。


    ######谢谢 原来这样!好吧 学习了!!######你模板中类型T体现在哪里?######回复 @w_xuexi : 净信书不如无书######必须给嘛?直接用int实例化,不行?还有就是这代码是书上的!######顶一个,g++也遇到这个问题,OC上,投支持票还要积分。。。
    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程