2012-02-16 8 views
1

我是否正確地聲明瞭派生類r_iter和c_iter的迭代器? 在派生類中,r_iter是2D矢量的迭代器,c_iter是迭代器到2D矢量中。如何將迭代器聲明爲派生類對象?

我收到以下錯誤,如果有人告訴我在哪裏,我錯了

add_round_key.cpp:26:34: error: expected class-name before ‘{’ token 
add_round_key.cpp:27:2: error: ‘dVector’ is not a template 
add_round_key.cpp:27:11: error: ‘dVector’ is not a template 
add_round_key.cpp:27:28: error: invalid use of ‘::’ 
add_round_key.cpp: In member function ‘void dVector::RotWord()’: 
add_round_key.cpp:37:2: error: ‘r_iter’ was not declared in this scope 
add_round_key.cpp:37:17: error: ‘class dVector’ has no member named ‘begin’ 
add_round_key.cpp:38:2: error: ‘c_iter’ was not declared in this scope 





line# 26 class dVector:public std::vector { 
line# 27    dVector <dVector <int> >::iterator r_iter; 
        dVector <int>::iterator c_iter; 

         public: 
         void RotWord(); 
         void SubWord(); 
       }; 

      void dVector::RotWord() { 
        int temp ; 
line# 37   r_iter = this->begin(); 
    #38   c_iter = (*r_iter).end(); 
       *(c_iter) = *(c_iter+4); 
       *(c_iter+4) = *(c_iter+8); 
      } 


      void dVector::SubWord(){ 
       //function definition 
     } 

    int main (int argc, char *argv[]) 
    { 

     /*wordArray is a 4x4 word array stored in column-order form*/ 
     dVector <dVector <int> > wordArray(4,dVector<int>(40,0)); 
     dVector <dVector <int> >::iterator ckIter,i ,j, row_iter; 
     dVector <int>::iterator ii,jj, col_iter; 
     wordArray.RotWord(); 
     wordArray.Subword(); 
    } 

回答

2

第26行:std::vector是你需要告訴它專注於做它,你可以繼承一個類的模板。

行26獎勵:避免性病容器

線27繼承:是dVector模板?如果不是,你不能像使用它一樣!

37-38行:第27行和第28行中的錯誤導致r_iterc_iter不被聲明,因此您在這些行上得到的錯誤。

這就是說,這可能會幫助你完成你想做什麼:

template<class T> 
class dVector : public std::vector<T> { 
    typename dVector <dVector <T> >::iterator r_iter; 
    typename dVector <T>::iterator c_iter; 

但意見仍然存在,don't inherit from std containers

+0

非常感謝。我以同樣的方式處理容器和類。非常感謝您的意見 – 2012-02-16 01:10:40

0

我想你忘記從中繼承之前的模板類型分配給std::vector我會很感激。

class dVector:public std::vector {  // Not valid 

class dVector:public std::vector<int> { // Valid