代码中的等号运算符不匹配

时间:2018-01-05 15:08:29

标签: c++ oop systemc

以下代码我收到错误

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();
 }
}

2 个答案:

答案 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类型的对象,并且正在对其进行==比较。
您没有显示类实现,但似乎此类没有相等比较运算符的定义 因此,编译器告诉你它不知道如何进行这种平等比较