解决错误:与运算符[]不匹配

时间:2018-05-25 13:58:10

标签: c++

以下代码给出了此错误:

  

错误:不匹配'运营商[]' (操作数类型是' S'和' int')|"

在第38,40,52,53,54,54,67,67行中(是的,同样的错误在54和67两次)。

#include <iostream>

using namespace std;

const int m=3;

class S
{
public:

    int col;
    char ch;


    int getcolumn()
    {
        return col;
    }

    int getrow()
    {
        int t=ch; t-=65;
        return t;
    }
};


void input(S *mat)
{
    int i,j;

    for(i=0;i<m;i++)
    {
        cout<<endl<<"ROW "<<i+1;
        for(j=0;j<m;j++)
        {
            cout<<endl<<"COLUMN "<<j+1<<endl;
            cout<<"enter the number";
            cin>>mat[i][j].col;
            cout<<"enter the letter";
            cin>>mat[i][j].ch;
        }
    }
}

void logic(S *orig,S *repl)
{
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<m;j++)
        {
            int coll=orig[i][j].getcolumn();
            int row=orig[i][j].getrow();
            repl[row][coll]=orig[i][j];
        }
    }
}


void output(S *repl)
{
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<m;j++)
        {
            cout<<repl[i][j].col<<repl[i][j].ch<<"   ";
        }
        cout<<endl;
    }
}

int main()
{
    int i,j;

    S orig[10][10],repl[10][10];

    input(&orig[0][0]);
    logic(&orig[0][0],&repl[0][0]);
    output(&repl[0][0]);

    return 0;
}

如何解决错误?我正在使用带有GCC编译器的code :: blocks 17.12。我对c ++很陌生,所以请以更详细的方式解释。

1 个答案:

答案 0 :(得分:1)

问题是,一旦数组转换为指针,您只能对其执行1D指针运算。您的函数采用S *类型的参数,即指向S的指针。

让我们来output(S *repl)repl是指向S的指针。这意味着repl[i]S的(引用)。现在,您再次应用[j],但S没有任何此类运算符,因此错误输出。

您需要做的是手动执行2D索引,可能是这样的:

size_t idx2d(size_t i, size_t j, size_t iCount)
{
    return j * iCount + i;
}

void output(S *repl, size_t iCount)
{
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<m;j++)
        {
            cout<<repl[idx2d(i, j, iCount)].col<<repl[idx2d(i, j, iCount)].ch<<"   ";
        }
        cout<<endl;
    }
}

// In main:

output(&repl[0][0], 10);