2012-08-05 92 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