以下代码给出了此错误:
错误:不匹配'运营商[]' (操作数类型是' 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 ++很陌生,所以请以更详细的方式解释。
答案 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);