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

相关问题