C++中,模板类的常量静态成员函数的初始化问题

代码如下template<classT>classA{private:staticconstTx;。。。。。};template<classT>intA<T>::x=0;... 代码如下
template<class T>
class A{
private:
static const T x;
。。。
。。
};

template<class T>
int A<T>::x=0;

template<class T>
float A<T>::x=1.0f;

有两个问题:
以上代码报错,说我重定义了常量静态成员变量,可是问题不同的模板实例需要不同的变量值,这种情况下应该如何实现?
关于初始化的位置问题,是应该放在头文件中还是应该放在实现文件中?
展开
 我来答
memo_阿勒秋
2013-05-31 · TA获得超过143个赞
知道小有建树答主
回答量:87
采纳率:0%
帮助的人:108万
展开全部
你想声明什么类型的变量?
1.int型
声明一个静态常量,因为const常量只能在声明时初始化,所以你直接在类的private部分改为:
static const int x = 0;
然后把后面
template <class T>
int A<T>::x = 0;
去掉就可以了。
2.T型
声明一个静态常量,因为const常量只能在声明时初始化,所以你直接在类的private部分改为:
static const T x = 0;
然后把后面
template <class T>
int A<T>::x = 0;
去掉就可以了。不过会面临一个问题,不知道T具体的类型,用0去初始化它可能会不合适。

template <class T>
T
追问
还有,你好像没有明白我的意思。讲具体一点,我想写一个叫做color的模板类,里面有两个标志了颜色取值的上下界的静态常量;有可能通过两种类型实例化它,一个是unsigned char类型0~255, 还有float 类型0.0f~1.0f。因此上下界必须针对不同的类型设定不同的值,这个问题如何解决?
宝欧天9
2013-06-01
知道答主
回答量:16
采纳率:0%
帮助的人:6.9万
展开全部
你原来设计的是一个静态变量,不可以再给他赋值啊,你要赋值应该在类中赋值。
那个初始化,应该是在main函数中要用到该模板时直接用一个现实的类型代替T就可以了。
额,那个,还有啊,说一句,要用类中的私有元素只能通过类中的函数,或是构造函数实现,你在类外怎么能直接用啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zjfaok
2013-05-31 · TA获得超过6806个赞
知道大有可为答主
回答量:4146
采纳率:62%
帮助的人:1615万
展开全部
template<>
int A<int>::x=0;

template<>
float A<float>::x=1.0f;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chujiangke001
2013-05-31 · TA获得超过1605个赞
知道小有建树答主
回答量:1352
采纳率:0%
帮助的人:695万
展开全部
static const T x;

改成
static const int x;或者static const float x;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式