指针和数组问题

时间:2011-08-19 13:03:39

标签: c++ pointers

在C ++中,我遇到指针等问题。如何解决以下问题?

错误:'中的'operator ='不匹配(stage-> Stage :: tiles +((unsigned int)(((unsigned int)t)* 12u)))= (operator new(12u),(,((Tile *))))'| 注意:候选人是:Tile& Tile :: operator =(const Tile&)| *

stage.h

#include "Tile.h"

class Stage {
    public:
        Tile *tiles;
        int size;
        void init(int size);
};

stage.cpp

void Stage::init(int size) {
    this->size = size;
    this->tiles = new Tile[size];
}

application.cpp

#include "Stage.h"
#include "Tile.h"

bool setTiles( Stage * stage ) {

    for( int t = 0; t < stage->size; t++ ) {
        stage->tiles[t] = new Tile();
    }

    return true;
}

stage.init(1234);
setTiles( &stage );

另外,我真的不知道何时使用object.attribute以及何时使用object->attribute

4 个答案:

答案 0 :(得分:6)

stage->tiles[t] = new Tile();

你在不是指针的东西上调用新东西。是的,tiles是指向数组的指针,但是,该数组的每个元素都不是指针。为了完成这项工作,您需要一个指针数组或一个指向指针的指针,例如:

Tile **tiles;

你还可以做的是创建一个单独的指针对象,分配它,然后使用

将数据复制到数组元素
stage->tiles[i] = *somePointer;

然后删除指针以释放分配的内存。这将保留副本,因为您调用了复制构造函数。

答案 1 :(得分:3)

您正在尝试分配带有指向数组的指针。试试这个:

class Stage {
    public:
        Tile **tiles;
        void init(int size);
};

答案 2 :(得分:1)

stage->tiles[t] = new Tile();

上述内容不是有效的 C ++ 代码,您可能会对使用其他语言(如 C#)的方式感到困惑。尽管new可用于分配动态内存,但将对象分配给动态创建的数组中的特定元素不需要new构造。实际上,只要您调用new Tile[size],就会创建该对象。您可能想要做的是,创建一个Tile类型的对象,并将其分配给tiles中的特定元素。

Tile myTile;

// do something with myTile

this->tiles[0] = myTile;

答案 3 :(得分:0)

new Tiles()返回指向Tiles实例的指针。

Tile *tiles定义了一个Tiles数组,而不是指针。

首先从Tile **tiles开始。