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;
有两个问题:
以上代码报错,说我重定义了常量静态成员变量,可是问题不同的模板实例需要不同的变量值,这种情况下应该如何实现?
关于初始化的位置问题,是应该放在头文件中还是应该放在实现文件中? 展开
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;
有两个问题:
以上代码报错,说我重定义了常量静态成员变量,可是问题不同的模板实例需要不同的变量值,这种情况下应该如何实现?
关于初始化的位置问题,是应该放在头文件中还是应该放在实现文件中? 展开
4个回答
展开全部
你想声明什么类型的变量?
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
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。因此上下界必须针对不同的类型设定不同的值,这个问题如何解决?
展开全部
你原来设计的是一个静态变量,不可以再给他赋值啊,你要赋值应该在类中赋值。
那个初始化,应该是在main函数中要用到该模板时直接用一个现实的类型代替T就可以了。
额,那个,还有啊,说一句,要用类中的私有元素只能通过类中的函数,或是构造函数实现,你在类外怎么能直接用啊。
那个初始化,应该是在main函数中要用到该模板时直接用一个现实的类型代替T就可以了。
额,那个,还有啊,说一句,要用类中的私有元素只能通过类中的函数,或是构造函数实现,你在类外怎么能直接用啊。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
template<>
int A<int>::x=0;
template<>
float A<float>::x=1.0f;
int A<int>::x=0;
template<>
float A<float>::x=1.0f;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
static const T x;
改成
static const int x;或者static const float x;
改成
static const int x;或者static const float x;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询