2017-03-17 182 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

偏題:'state [j] = tablica [i + 1];'有可能要求'tablica [36]'超出範圍。 – user4581301

回答

3

你傳遞一個指針std::array作爲參數,但是如果使用索引操作符[]直接它不是先取消引用指針([]運算符是針對原始指針類型和std::array定義的,因此存在混淆)。

我建議改變你的函數接受一個參考:

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

...或者繼續使用array<char,6>*但隨後提領它:

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

... 

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

如果您使用std::array代替原料陣列/指針爲安全起見,您應該考慮使用at方法代替索引操作符:

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]'返回一個'std :: array'而不是'char'。 – Galik

相關問題