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是否有继承,如果有,应该怎么写?上段代码中哪个地方存在了错误?

解决方案 »

  1.   

    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>
    {
    };
      

  2.   

    不是STL的问题,class的定义后要加;
      

  3.   

    STL是可以继承的,你的写法继承写法也没有问题你看看是否是其它问题
      

  4.   

    yujia120(永不停息)(求职@深圳),能不能说具体点啊?那个定义要加是什么意思?
    还有,我在程序中就写这几句代码就会报错,如果不是头文件的问题,那就一定是这几句代码的问题
      

  5.   

    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的定义没有用分号(;)结束
    当然就定义失败了
      

  6.   

    写完整了就对了:
    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(){};
    };类的数据成员定义为什么要用引用呢?很奇怪!尽量走常规,尤其是试用模板的时候。
      

  7.   

    那个地方偶看到了,确实是笔误,不过具体问题不在此处,问题在于,在第一个类的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下编译此问题很严重
      

  8.   

    Buffer& buffer这个是引用的定义,类的数据成员为什么要用引用呢?如果非要用外部数据就用指针。而且typedef Buffer buffer;这句定义是什么意思呢?弱弱地问一句:你想要实现什么功能?
      

  9.   

    事实上这个东东偶也搞不懂,代码不是我写的,但出现错误是要偶来搞,这是程序最初的定义,目的是用类的继承来实现某些功能,目前就是这个样子,出错的地方就是那个data=*((T*)require(sizeof(T))); 这一句,关键是类raw_format继承类generic_format,但在类raw_format中使用require就会报错,搞不明白了~~