在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
?
答案 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
开始。