2017-03-17 12 views
-1

配列に関数インジケータを渡そうとするとこのコードを作成する際に問題がありますか?何か案は ?タイプ 'std :: array <char, 6>'と 'char'は互換性がありません

コンパイラエラー:

Types 'std::array<char, 6>' and 'char' are not compatible 

は、ここに私のコードです:

void NextHash(std::array<char,6>* state) { 

    std::string tablica = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; 

    int j = 5; 

    for(int i = 0; i < 36; i++) { 

     if(tablica[i] == state[j]) { 
      if(i == 35) { 
       state[j] = tablica[0]; 
       j--; 
       i=-1; 
      } 
      else{ 
       state[j] = tablica[i+1]; 
       i = tablica.size(); 
      } 
     } 
    } 
} 
+1

あなたの問題は何ですか? –

+1

トピックオフ: '状態[j] = tablica [i + 1];は範囲外の' tablica [36] 'を要求する可能性があります。 – user4581301

答えて

3

あなたは、パラメータとしてstd::arrayポインタに渡したが、その後、直接のインデックス演算子[]を使用しています最初にポインタを逆参照するのではなく([]演算子は生ポインタ型とstd::arrayの両方に定義されているため、混乱します)。

私が参照受け入れるように機能を変更することをお勧め:あなたは生の代わりにstd::arrayを使用している場合

if(tablica[i] == (*state)[j]) { 

... 

(*state)[j] = tablica[0]; 

:それを間接参照し、その後

void NextHash(std::array<char,6>& state) { 

を...またはarray<char,6>*を継続して使用するが、配列/ポインタを使用する場合は、インデックス演算子の代わりにメソッドを使用することを検討する必要があります。

void NextHash(std::array<char,6>* state) { 
... 
if(tablica[i] == state->at(j)) { 
... 
state->at(j) = tablica[0]; // this is valid C++ as references can be assigned to 

または:

void NextHash(std::array<char,6>& state) { 
... 
if(tablica[i] == state.at(j)) { 
... 
state.at(j) = tablica[0]; 
+0

それはOPが言ったエラーの原因になりますか? –

+0

@MateuszZaremba逆参照はどのように機能していませんか?どのようなエラーが出ますか? – Dai

+1

@FantasticMrFox 'state'が' std :: array'の*ポインタ*の場合、 'state [j]'は 'char'ではなく' std :: array'を返します。 – Galik

関連する問題