C++ 类型';std::数组<;char,6>';和';char';不兼容

C++ 类型';std::数组<;char,6>';和';char';不兼容,c++,arrays,C++,Arrays,当我尝试将函数指示符赋给数组时,我在构建这段代码时遇到了问题?有什么想法吗 编译器错误: Types 'std::array<char, 6>' and 'char' are not compatible 类型“std::array”和“char”不兼容 这是我的密码: void NextHash( std::array<char,6>* state ) { std::string tablica = {'0','1','2','3','4','5','6'

当我尝试将函数指示符赋给数组时,我在构建这段代码时遇到了问题?有什么想法吗

编译器错误:

Types 'std::array<char, 6>' and 'char' are not compatible
类型“std::array”和“char”不兼容
这是我的密码:

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();
            }
        }
    }
}
void NextHash(标准::数组*状态){
字符串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;
对于(int i=0;i<36;i++){
if(tablica[i]==状态[j]){
如果(i==35){
状态[j]=tablica[0];
j--;
i=-1;
}
否则{
状态[j]=tablica[i+1];
i=tablica.size();
}
}
}
}

您将指针作为参数传递给
std::array
,但随后直接在其上使用索引运算符
[]
,而不是首先取消对指针的引用(原始指针类型和
std::array
都定义了
[]
运算符,因此造成混淆)

我建议更改您的功能以接受推荐人:

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

如果您使用的是代码> STD::数组< /COD>而不是原始数组/指针,出于安全原因,您应该考虑使用<代码> > <代码>方法而不是索引运算符:

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(标准::数组*状态){
...
如果(tablica[i]==状态->在(j)){
...
状态> AT(j)= TabLICA[0 ];//这是有效的C++,因为可以指派引用
或:

void NextHash(标准::数组和状态){
...
if(tablica[i]==在(j)处的状态){
...
状态。at(j)=表[0];

你的问题是什么?离题:
state[j]=tablica[i+1];
有可能要求
tablica[36]
哪个超出范围。@MateuszZaremba解引用怎么不起作用?你会得到什么错误?@FantasticMrFox是的,因为如果
state
是指向
std::array
的指针,那么就执行
state[j]
返回
std::array
而不是
char
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];