我有一些包含三个类的代码。 相关的类结构包括以下内容:
我遇到的问题是,当我这样设置时,我遇到了访问冲突:
bool result = class1->class2->GetProperties().CheckEmpty();
但如果我这样设置,我没有任何错误:
bool result = class2->GetProperties().CheckEmpty();
为什么添加另一个类层会突然导致此问题?
以下是我用来重现错误的代码。 in main中的两行不会产生错误但会对其进行注释并取消注释其他两行,您将收到错误。
#include "stdafx.h"
#include <map>
class PropertySet
{
public:
PropertySet::PropertySet(){};
PropertySet::~PropertySet(){};
bool CheckEmpty() const { return properties.empty(); }
private:
std::map< std::string, std::string > properties;
};
class Tile
{
public:
Tile::Tile() {};
Tile::~Tile() {};
// Get a set of properties regarding the tile.
const PropertySet &GetProperties() const { return properties; }
private:
PropertySet properties;
};
class Tileset
{
public:
Tileset::Tileset(){};
Tileset::~Tileset(){};
Tile* tile;
};
int main()
{
bool test = false;
//NO error-----------------------------
Tile* t = new Tile();
test = t->GetProperties().CheckEmpty();
//-------------------------------------
//ERROR--------------------------------
//Tileset* t = new Tileset();
//test = t->tile->GetProperties().CheckEmpty();
//-------------------------------------
delete t;
return 0;
}
答案 0 :(得分:1)
构造新的Tileset时,指向Tile的指针未初始化。
Tileset::Tileset(){};
Tileset::~Tileset(){};
应该是
Tileset::Tileset(){ tile = new Tile(); };
Tileset::~Tileset(){ delete tile; };