2012-02-16 9 views
1

派生クラスr_iterとc_iterのイテレータを正しく宣言していますか? 派生クラスの内部では、r_iterは2次元ベクトルのイテレータであり、c_iterは2次元ベクトルへのイテレータです。派生クラスオブジェクトにイテレータを宣言するには?

誰かが私に語った場合、私は次のエラーを取得していると私は本当に感謝私が間違っている

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

std::vectorは、あなたがそれあなたが継承できるクラス作るために特化するのか、それを伝える必要がありますテンプレートです。

ライン26ボーナス:STDコンテナ

27行目から継承避けてください:dVectorテンプレートですか?それがそうでなければ、それをそのまま使用することはできません!

行37〜38:行27と行28のエラーにより、r_iterc_iterが宣言されないため、これらの行にエラーが発生します。 don't inherit from std containers

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

しかし、アドバイスが残っている:これはあなたが何をしようとして達成に役立つかもしれない、と述べた

+0

ありがとうございました。私はコンテナとクラスを同じように扱っていました。あなたのコメントをありがとう –

0

私はあなたがそれを継承する前にstd::vectorにテンプレートの種類を割り当てるために忘れていると思います。ライン26

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

class dVector:public std::vector<int> { // Valid 
関連する問題