2012-02-16 82 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