0

我在用 C++ 创建对象时遇到了一些麻烦。我创建了一个名为 Instruction 的类,并尝试创建一个新实例,但出现编译器错误。

班级代码:

class Instruction{

  protected:
    string name;
    int value;

  public:
    Instruction(string _name, int _value);
    ~Instruction();
    void setName(string _name);
    void setValue(int _value);
    string getName();
    int getValue();
    virtual void execute();
};



//constructor
inline Instruction::Instruction(string _name, int _value){
    name = _name;
    value = _value;
}
//destructor
inline Instruction::~Instruction(){
    //name = "";
    //value = 0;
}
inline void Instruction::setName(string _name){
     name = _name;
}

inline void Instruction::setValue(int _value){
    value = _value;
}

inline string Instruction::getName(){
       return name;
}

int Instruction::getValue(){
    return value;
}
inline void Instruction::execute(){
    cout << "still have to implement";
}

这就是我尝试创建新对象的方式:

Instruction* inst;
inst = new Instruction("instruction33", 33);

我收到以下编译器错误:

functions.h:70: error: no matching function for call to ‘operator new(unsigned int, std::string&, int&)’
/usr/include/c++/4.3/new:95: note: candidates are: void* operator new(size_t)
/usr/include/c++/4.3/new:99: note:                 void* operator new(size_t, const std::nothrow_t&)
/usr/include/c++/4.3/new:105: note:                 void* operator new(size_t, void*)

你们是对的。错误来自这行代码:

instList.push_back(inst);

instList 是这样创建的:

list <Instruction> instList;  //#include <list> is in the file
4

5 回答 5

4

inst是一个指令对象的指针,是指令对象instList的列表。因此,当您尝试时instList.push_back(inst)它不起作用(它需要一个真实的对象而不是指向它的指针)。你应该有instList.push_back(*inst).

于 2009-11-15T04:04:39.743 回答
4

我认为您最好不要动态创建指令。

list <Instruction> instList;

instList.push_back(Instruction("instruction33", 33));

请注意,无需使用 new。
如果你使用 new 你应该删除指针。
这增加了您还没有准备好的复杂性。

于 2009-11-15T07:31:39.293 回答
0

实际上,看起来您的错误消息与您粘贴在 OP 中的代码没有任何关系。我有一个很好的响应,准备不将 const char * 作为 std::string& 参数传递,但这看起来不是你的问题。您发布的内容不足以查明问题。

于 2009-11-15T03:45:27.370 回答
0

您粘贴的代码没有任何问题,消息中的错误说要检查第 70 行的 functions.h。

于 2009-11-15T03:47:55.983 回答
0

代替:

instList.push_back(inst);

试试这个:

instList.push_back(*inst);

您正在尝试将指向指令的指针放入指令列表中。

于 2009-11-15T05:16:00.820 回答