嗨,我有两个类,一个叫做指令类,一个叫做LDI,它是从指令类继承的。
class Instruction{
protected:
string name;
int value;
public:
Instruction(string _name, int _value){ //constructor
name = _name;
value = _value;
}
~Instruction(){}
Instruction (const Instruction &rhs){
name = rhs.name;
value = rhs.value;
}
void setName(string _name){
name = _name;
}
void setValue(int _value){
value = _value;
}
string getName(){
return name;
}
int getValue(){
return value;
}
virtual void execute(){}
virtual Instruction* Clone() {
return new Instruction(*this);
}
};
/////////////end of instruction super class //////////////////////////
class LDI : public Instruction{
void execute(){
//not implemented yet
}
virtual Instruction* Clone(){
return new LDI(*this);
}
};
然后,我创建一个Instruction类型的指针,并尝试指向LDI类型的新实例。
Instruction* ptr;
ptr = new LDI("test", 22);
我收到以下编译器错误。有什么想法我做错了吗?
functions.h:71: error: no matching function for call to ‘LDI::LDI(std::string&, int&)’
classes.h:54: note: candidates are: LDI::LDI()
classes.h:54: note: LDI::LDI(const LDI&)
最佳答案
代码:new LDI(name, val)
专门说“用name
和val
调用LDI构造函数”。
没有使用name / val
的LDI构造函数。
实际上,我根本看不到LDI的构造函数。
如果要使用基类的构造函数,则方法如下:
public LDI(string _name, int _value) // Public constructor for LDI
: Instruction(_name, _value) // Delegate to the base-class constructor
{
// Do more LDI-specific construction here
}