一个有关STL template 继承的问题

bird1982 2005-08-31 08:44:18
C++和VC下都存在问题,就是自定义的模版类是否可以继承,相关例子请看下面代码。
template <class Buffer>
class generic_format
{
private:
Buffer& buffer;
public:
generic_format(Buffer& buf):buffer(buf) {}
}

template <class Buffer>
class raw_format: public generic_format<Buffer>
{
}
如果raw_format后面的继承注释掉,程序就不报错,如果添加上该段代码,系统就报该句声明不正确.

请问,STL是否有继承,如果有,应该怎么写?上段代码中哪个地方存在了错误?
...全文
122 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bird1982 2005-09-01
  • 打赏
  • 举报
回复
事实上这个东东偶也搞不懂,代码不是我写的,但出现错误是要偶来搞,这是程序最初的定义,目的是用类的继承来实现某些功能,目前就是这个样子,出错的地方就是那个data=*((T*)require(sizeof(T))); 这一句,关键是类raw_format继承类generic_format,但在类raw_format中使用require就会报错,搞不明白了~~
mintwlf 2005-09-01
  • 打赏
  • 举报
回复
Buffer& buffer这个是引用的定义,类的数据成员为什么要用引用呢?如果非要用外部数据就用指针。而且typedef Buffer buffer;这句定义是什么意思呢?

弱弱地问一句:你想要实现什么功能?
mintwlf 2005-08-31
  • 打赏
  • 举报
回复
写完整了就对了:
template<class Buffer>
class generic_format
{
protected:
Buffer buffer;
public:
generic_format(Buffer&buf):buffer(buf) {};
virtual ~generic_format(){};
};

template<class Buffer>
class raw_format: public generic_format<Buffer>
{
public:
raw_format(Buffer&buf) : generic_format<Buffer>(buf){};
~raw_format(){};
};

类的数据成员定义为什么要用引用呢?很奇怪!尽量走常规,尤其是试用模板的时候。
社会栋梁 2005-08-31
  • 打赏
  • 举报
回复
template <class Buffer>
class generic_format
{
private:
Buffer& buffer;
public:
generic_format(Buffer& buf):buffer(buf) {}
}

template <class Buffer>
class raw_format: public generic_format<Buffer>
{
}
---------------------------------------------------
上面的是语法问题,你class的定义没有用分号(;)结束
当然就定义失败了
bird1982 2005-08-31
  • 打赏
  • 举报
回复
yujia120(永不停息)(求职@深圳),能不能说具体点啊?那个定义要加是什么意思?
还有,我在程序中就写这几句代码就会报错,如果不是头文件的问题,那就一定是这几句代码的问题
yinzhaohui 2005-08-31
  • 打赏
  • 举报
回复
STL是可以继承的,你的写法继承写法也没有问题你看看是否是其它问题
社会栋梁 2005-08-31
  • 打赏
  • 举报
回复
不是STL的问题,class的定义后要加;
社会栋梁 2005-08-31
  • 打赏
  • 举报
回复
template <class Buffer>
class generic_format
{
private:
Buffer& buffer;
public:
generic_format(Buffer& buf):buffer(buf) {}
};


template <class Buffer>
class raw_format: public generic_format<Buffer>
{
};
bird1982 2005-08-31
  • 打赏
  • 举报
回复
那个地方偶看到了,确实是笔误,不过具体问题不在此处,问题在于,在第一个类的Protect属性里写的函数,到第二个函数里无法正常使用。
以上面的例子:
template <class Buffer>
class generic_format
{
private:
Buffer& buffer;
protected:
void* require(int n) {return buffer.require(n);}
void unrequire(int n) {buffer.unrequire(n);}
public:
generic_format(Buffer& buf):buffer(buf) {}
}

template <class Buffer>
class raw_format: public generic_format<Buffer>
{
public:
typedef Buffer buffer;

raw_format(Buffer& buf):generic_format<Buffer>(buf) {}

template <class T>
inline void input_simple(T& data)
{data=*((T*)require(sizeof(T)));}
}
这时require函数就会报错了,在其他继承的函数里使用也是报错,不知道原因是什么
注:在linux下编译此问题很严重

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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