所以我创建了一个父类,我将调用具有Parent
网格成员变量的Square*
。 grid变量是一个指向大量Squares的指针,它包含key
个成员变量。 (将此项目视为散列表)问题是我在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;
}
}
答案 0 :(得分:11)
你必须使用
this->grid[i*col + j].key1
this->grid[i*col + j].key2
这是因为即使你的网格是一个指针,你已经在其内存中分配了一个Square
对象数组。因此,当您使用[]运算符时,您将获得类型为Square
而非Square*
的对象,而对于Square
对象,您必须使用。运营商而不是 - &gt;操作者。
答案 1 :(得分:4)
我猜this->grid
的类型为Square*
,因此this->grid[0]
的类型为Square&
,您必须使用.
(点)而不是->
}(箭头)从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