使用"this"关键字时,"错误:表达式必须具有指针类型"

use*_*944 7 c++ this

所以我创建了一个父类,我将调用Parent它有一个Square*网格成员变量.grid变量是指向包含key成员变量的大型Square数组的指针.(将此项目视为哈希表)问题是我在Parent类中编写一个函数来编辑Square数组中的关键变量,并获得错误.这行代码编译:

this->grid = new Square[row*col];
Run Code Online (Sandbox Code Playgroud)

但这行不编译:

this->grid[i*col + j]->key1 = j;
Run Code Online (Sandbox Code Playgroud)

它强调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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

il_*_*uru 13

你必须使用

this->grid[i*col + j].key1
this->grid[i*col + j].key2
Run Code Online (Sandbox Code Playgroud)

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


Pio*_*ycz 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
Run Code Online (Sandbox Code Playgroud)