类型'std :: array <char,6 =“”>'和'char'不兼容

时间:2017-03-17 21:14:44

标签: c++ arrays

当我尝试将函数指示器提供给数组时,我有一个构建此代码的问题?有什么想法吗?

编译错误:

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 个答案:

答案 0 :(得分: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];