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

时间:2012-10-27 20:59:37

标签: c++ this

所以我创建了一个父类,我将调用具有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;
        }
    }

2 个答案:

答案 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