继承和异常
我有几个继承类,但我不知道如何创建一个默认的构造函数,地图其实是一张地图,包括ID名和其他东西的口袋妖怪继承和异常
class Pokemon {
public:
Pokemon(){}
Pokemon(std::map<std::string, std::vector<std::string> > &facts);
protected:
std::map<std::string, std::vector<std::string> > facts_;
};
class Dragon: virtual public Pokemon {
public:
Dragon() : Pokemon() {}
Dragon(std::map<std::string, std::vector<std::string> > &facts);
};
class Monster: virtual public Pokemon {
public:
Monster() : Pokemon() {}
Monster(std::map<std::string, std::vector<std::string> > &facts);
};
class Charmander: public Monster, public Dragon {
public:
Charmander() : Pokemon(), Monster(), Dragon(){}
Charmander(std::map<std::string, std::vector<std::string> > &facts);
};
class Charmeleon: public Charmander {
public:
Charmeleon() : Charmander() {}
Charmeleon(std::map<std::string, std::vector<std::string> > &facts);
};
class Charizard: public Charmeleon {
public:
Charizard() : Charmeleon() {}
Charizard(std::map<std::string, std::vector<std::string> > &facts);
};
我只是想知道如何编写该类的默认构造函数。
我的编译器不断显示错误是:
./List07.txt:10:10: error: no matching constructor for initialization of
'Charmander'
POKENAME(Charmander)
~~~~~~~~~^~~~~~~~~~~
main.cpp:276:44: note: expanded from macro 'POKENAME'
#define POKENAME(type) try { answer = new type(facts); } catch (int) {
^
./pokemon.h:148:7: note: candidate constructor (the implicit copy constructor)
not viable: no known conversion from 'const std::map<std::string,
std::vector<std::string> >' to 'const Charmander' for 1st argument
class Charmander: public Monster, public Dragon {
^
./pokemon.h:151:5: note: candidate constructor not viable: 1st argument ('const
std::map<std::string, std::vector<std::string> >') would lose const
qualifier
Charmander(std::map<std::string, std::vector<std::string> > &facts);
^
./pokemon.h:150:5: note: candidate constructor not viable: requires 0 arguments,
but 1 was provided
Charmander() : Pokemon(), Monster(), Dragon(){}
^
编译器试图告诉你什么是错在这里:
没有从已知的转换 '常量的std ::地图<的std :: string,性病::矢量<的std :: string>>'
所以,显然facts
是常量,但所有的(非常奇怪的)构造函数接受非const的引用,所以它们不能被使用。
所以如何改变我极其奇怪的构造函数 –
如果你想传递一个常量映射,参数应该是一个const引用。从整个容器创建单个对象是非常不可用的。这就是有点“奇怪”。 –
糟糕 - “不可用”应该是“不寻常的”。非常有帮助的拼写更正! –
你的错误是很清楚的,收拾残局,这是你到底是什么了:从“const std::map<std::string, std::vector<std::string> >
”
没有已知的转换...
候选人的构造并不可行:第一个参数( 'const std::map<std::string, std::vector<std::string> >
')将失去ç onst限定词Charmander(std::map<std::string, std::vector<std::string> > &facts);
您正在将一个const对象传递给一个构造函数,该构造函数接受一个非const引用。检查你的构造函数接受const正确性的事实。
什么'std :: map>'又代表了什么? –
LogicStuff
默认构造函数* what *?您已经定义了默认的构造函数... – Nim
这个问题与异常无关。 – aschepler