2012-08-05 121 views
0

我不明白派生文件的声明有什么问题。请帮我找到它的问题。 这是我的头文件的内容:在声明从模板类继承的类时发生编译错误:

/* 
* STLSandbox.h 
* 
* Created on: Aug 4, 2012 
*  Author: aksinghdce 
*/ 

#ifndef STLSANDBOX_H_ 
#define STLSANDBOX_H_ 



namespace amit { 

class STLSandbox { 
public: 
    STLSandbox(); 
    virtual ~STLSandbox(); 
}; 
template<typename T> 
class MyCotainer{ 
public: 
    virtual void inserthere(T&) = 0; 
    virtual void deletehere(T&) = 0; 
    virtual const void printhere(T&) = 0; //promise not to modify anything 
}; 

template<typename T> 
class VectorOf: public MyContainer<T> 
{ 
public: 
    virtual void inserthere(T&); 
    virtual void deletehere(T&); 
    virtual const void printhere(T&); 
private: 
    std::vector<T&> v_data; // vector of references of type T 
}; 

template<typename T> 
void VectorOf<T>::inserthere(T& item){ 
    v_data.push_back(item); 
} 

template<typename T> 
void VectorOf<T>::deletehere(T& item){ 
    v_data.pop_back(item); 
} 

template<typename T> 
const void VectorOf<T>::printhere(T& item){ 
    std::vector<T>::iterator i = null; 
      for(i=v_data.begin();i<v_data.end();i++) 
      { 
       std::cout<<*i<<std::endl; 
      } 
} 

} 

#endif /* STLSANDBOX_H_ */ 

我用gcc 4.2.1

以下是我收到的错误:

[...]/STLSandbox.h:26: error: expected template-name before ‘<’ token 
[...]/STLSandbox.h:26: error: expected `{' before ‘<’ token 
[...]/STLSandbox.h:26: error: expected unqualified-id before ‘<’ token 
[...]/STLSandbox.h:37: error: ‘template<class T> class amit::VectorOf’ used without template parameters 
[...]/STLSandbox.h: In function ‘void amit::inserthere(T&)’: 
[...]/STLSandbox.h:38: error: ‘v_data’ was not declared in this scope 
[...]/STLSandbox.h: At global scope: 
[...]/STLSandbox.h:42: error: ‘template<class T> class amit::VectorOf’ used without template parameters 
+0

忽略其他错误,主要问题是你不能创建ref的向量'std :: vector v_data;',考虑'std :: reference_wrapper向量''如果你正在使用C++ 11 – 2012-08-05 04:21:48

回答

0

看起来它只是一个错字。您已定义类MyCotainer(请注意缺少的n),但稍后使用正确的MyContainer

+0

你编辑过这个问题,你应该已经修复了这个错字 – 2012-08-05 04:15:53

+0

@Anubis先生我不认为这是合适的,因为它会使问题模拟 – 2012-08-05 04:17:10

+0

谢谢!这样一个愚蠢的错误 – aksinghdce 2012-08-06 19:40:27