12

所以我创建了一个父类,我称之为Parent具有Square*网格成员变量的父类。网格变量是指向包含key成员变量的大型 Squares 数组的指针。(把这个项目想象成一个哈希表)问题是我在Parent类中创建一个函数来编辑数组中的关键变量Square,并得到一个错误。这行代码编译:

this->grid = new Square[row*col];

但这行不编译:

this->grid[i*col + j]->key1 = j;

它强调this并说表达式必须具有指针类型。我想知道是否有人对我可能做错了什么有想法?

void Parent::initialize(int row,int col) {
    this->grid = new Square[row*col];
    for(int i = 0; i < row; i++) {
        for(int j = 0;j < col; j++) {
            this->grid[i*col + j]->key1 = j;
            this->grid[i*col + j]->key2 = i;
        }
    }
4

2 回答 2

16

你必须使用

this->grid[i*col + j].key1
this->grid[i*col + j].key2

那是因为即使您的网格确实是一个指针,您也已经在其内存指向的对象中分配了一个Square对象数组。因此,当您使用 [] 运算符时,您将获得一个类型的对象,Square而不是 aSquare*Square您必须使用的对象。运算符而不是-> 运算符。

于 2012-10-27T21:18:54.443 回答
4

我猜this->grid是 type Square*,所以this->grid[0]是 typeSquare&并且您必须使用.(点)而不是->(箭头)来访问来自Square&. 要将箭头用于表达式表达式必须具有指针类型...

this->grid[i*col + j]->key2
//                   ^^: this->grid[i*col + j] is not a pointer 
this->grid[i*col + j].key2
//                   ^ use dot to access key2 and key1 too
于 2012-10-27T21:12:31.730 回答