模板中,使用模板成员变量的问题

luoqi 2010-01-29 09:46:41
template<class T>
class TM
{
public:
explicit TM(int size) : m_size(size){}
protected:
int m_size;
};
template<class T>
class TA
{
TM<T> a(8);//wrong
//TM<T>(8) a;//wrong
};

如题:
如何才能正确定义TA::TM类型成员变量?
...全文
299 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Squadn 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 taodm 的回复:]
另外,楼主是从java转行过来的么?

[/Quote]

Mark

但是那位大侠知道为什么在Java里面这样不在构造函数里面赋值是可以的呢?
pengzhixi 2010-01-29
  • 打赏
  • 举报
回复
TM <T> a(8);//wrong
我会看成是一个函数,返回的是TM<T>这个类型,参数是8.

template <class T>
class TM
{
public:
explicit TM(int size=5) : m_size(size){}
protected:
int m_size;
};
template <class T>
class TA
{
TM <T>a;//wrong
//TM <T>(8)a;//wrong
};
luoqi 2010-01-29
  • 打赏
  • 举报
回复
最近才开始模板,
忽略了,声明时赋值的问题,
好比:
class a
{
int a = 5;
};
但通过template,一下子没有看出来.
太乙 2010-01-29
  • 打赏
  • 举报
回复

看错问题了,嘿嘿,sorry

template <class T>
class TM
{
public:
explicit TM(int size) : m_size(size){}
protected:
int m_size;
};
template <class T>
class TA
{
public:
TA():a(8){}
TM<T> a;//wrong
//TM <T>(8) a;//wrong
};

luoqi 2010-01-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 pur_e 的回复:]
不是模板的问题,就算是你弄个int a=5;也是报错的

int a=5;报错知道啥意思吧,没有实例不能初始化

需要放在构造函数初始化列表里,如下:
C/C++ codeclass TA
{public:
TA():a(8){}private:
TM<T> a();
};
[/Quote]

正解!!!!!!!
taodm 2010-01-29
  • 打赏
  • 举报
回复 1
楼主啊,你这最基本的数据成员定义基本功都不过,就开始玩模板,当然要忙不过来了。
pur_e 2010-01-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 pur_e 的回复:]
不是模板的问题,就算是你弄个int a=5;也是报错的

int a=5;报错知道啥意思吧,没有实例不能初始化

需要放在构造函数初始化列表里,如下:
C/C++ codeclass TA
{public:
TA():a(8){}private:
TM<T> a();
};
[/Quote]

已经说了,大哥,就是这个问题
luoqi 2010-01-29
  • 打赏
  • 举报
回复
请大家先仔细思考,再经过测试,再回答好吗?
否则我忙不过来了.
luoqi 2010-01-29
  • 打赏
  • 举报
回复
TM <T> a;
//TM的construct是explicit的, 必须传递参数
z569362161 2010-01-29
  • 打赏
  • 举报
回复
template <class T>
class TM
{
public:
explicit TM(T size) : m_size(size){}
protected:
T m_size;
};
template <class T>
class TA
{
TM <int> a(8);//wrong
//TM <int>(8) a;//wrong
};
pur_e 2010-01-29
  • 打赏
  • 举报
回复
不是模板的问题,就算是你弄个int a=5;也是报错的

int a=5;报错知道啥意思吧,没有实例不能初始化

需要放在构造函数初始化列表里,如下:

class TA
{
public:
TA():a(8){}
private:
TM<T> a();
};
luoqi 2010-01-29
  • 打赏
  • 举报
回复
explicit TM(T size) : m_size(size){}
//你改变了程序逻辑
SammyLan 2010-01-29
  • 打赏
  • 举报
回复
template <class T>
class TA
{
TM <T> a;//wrong
//TM <T>(8) a;//wrong
};
太乙 2010-01-29
  • 打赏
  • 举报
回复


template <class T>
class TM
{
public:
explicit TM(T size) : m_size(size){}
protected:
T m_size;
};
template <class T>
class TA
{
TM <int> a(8);//wrong
//TM <int>(8) a;//wrong
};

luoqi 2010-01-29
  • 打赏
  • 举报
回复
1.如果我直接把TM提出来使用是没有问题的.
2.还有,如果我把TM的construct参数设置默认值,如:TM(int size=8);
再在TA中使用时不传递参数,如:TM<T> a;这样也没问题;
luoqi 2010-01-29
  • 打赏
  • 举报
回复
vc7
error C2059: 语法错误 : “常数”
参见对正在编译的类模板实例化“TA<T>”的引用
taodm 2010-01-29
  • 打赏
  • 举报
回复
另外,楼主是从java转行过来的么?
taodm 2010-01-29
  • 打赏
  • 举报
回复
什么编译器?什么出错信息?

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧