以下代码我收到错误
receive_cmd.cpp:12:40:错误:不匹配'运营商==' in&t; tmp_cmd == gold_rom [tmp_cmd.cmd :: cmd_id]'
void tb::receive_cmds(){
cmd tmp_cmd;
cmd gold_rom[128];
wait(1, SC_NS);
cmd_error = false;
while(true){
tmp_cmd = tb_cmd_in->read();
if (tmp_cmd == gold_rom[tmp_cmd.cmd_id]) {
cout << sc_time_stamp() << " " << name();
cout << ": received correct result for: " << tmp_cmd << endl;
}
else {
cmd_error++;
cout << sc_time_stamp() << " " << name();
cout << ": ERROR command = "<< tmp_cmd
<< ", should be: "
<< gold_rom[tmp_cmd.cmd_id];
}
num_cmds --;
cmd_received.notify();
}
}
答案 0 :(得分:1)
您需要明确为bool cmd::operator==(const cmd &)
提供重载。
这是C ++,而不是Java。没有为您生成自动比较运算符。您应该为涉及要使用的用户定义类型的每个比较编写一个。这是一个简单的例子:
class A {
public:
int a;
A(int _a) : a(_a) {}
bool operator == (const A & ref) const;
};
bool A::operator == (const A & ref) const {
return this->a == ref.a;
}
A x(5), y(5), z(7);
bool b1 = (x == y); // b1 is true
bool b2 = (x == z); // b2 is false
答案 1 :(得分:1)
您正在使用cmd
类型的对象,并且正在对其进行==
比较。
您没有显示类实现,但似乎此类没有相等比较运算符的定义
因此,编译器告诉你它不知道如何进行这种平等比较