抱歉打扰你这么容易的'题。我试图对我的代码进行概述,所以我希望以下内容干净整洁,这是我的精简代码:
class field_t {
public:
field_t(fieldmap_t* fieldmap);
~field_t();
private:
fieldmap* fieldmap;
virtual int add_self_to_set(){ std::cout << "ERROR"; std::exit(0); };
};
//constructor
field_t::field_t(fieldmap * fieldmap){
this->fieldmap=fieldmap;
this->add_self_to_list();
};
class area_t : public field_t {
public:
// constructors are not inherited
area_t(fieldmap_t* fieldmap) : field_t(fieldmap);
private:
virtual int add_self_to_set(); //virtual because their will be further child classes.
};
int area_t::add_self_to_set() {
this->fieldmap->area_list.insert(this);
return 1;
};
好的,这段代码应该有效(希望我错过了;或者不是这样)。
问题是什么?作为area_t calls
field_t::field_t(fieldmap)
的构造函数,它(当然)构建了一个field_t object
,它会说“错误”。和exit()
;。
我想要的是在构造函数中调用替换的area_t::add_self_to_set()
函数(这就是我在field_t
中将其声明为虚拟的原因),但这并不起作用。这似乎是我的逻辑,但我不知道如何正确实施它。我需要将类插入到每个类类型的另一个列表(std::set
)中。
当我注意到这些问题时,我也想到了另一种方式。我可以通过直接调用
将add_self_to_list()
调用添加到area_t
构造函数中
area_t(fieldmap_t* fieldmap) : field_t(fieldmap){this->fieldmap->area_list.insert(this);};
并省略所有虚拟add_self_to
列表内容。但这会导致下一个孩子的下一个问题:
class entrance_t : public area_t{
entrance_t(fieldmap_t* fieldmap) : area_t(fieldmap){this->fieldmap->entrance_list.insert(this);};
};
我当然不希望entrance_t
出现在are_list
中!
构造函数的类似问题。
任何想法?非常感谢你提前的时间。我想我不需要说,我是初学者^^。
迎接