比较运算符“不匹配”错误

时间:2010-11-27 22:48:42

标签: c++

我在网站上搜索了类似的内容,但其他关于“不匹配运营商”错误的帖子对我的情况没有帮助。

我在开头有一个struct节点,然后是以下代码:

函数end()返回一个类型节点。因此,语句op!= end(OPEN)应该解决得很好,但是我收到错误:'* op!= end(OPEN)'中的'operator!='不匹配

我正在使用G ++编译器。有谁知道我做错了什么?几个小时我一直在努力...谢谢

typedef struct node {   
bool h1;
bool w1;
bool h2;
bool w2;
bool h3;
bool w3;
bool b;

int operation;
int iterator;

node *parent;};

node end ( list l ) {
node *n;

return *n;}

bool exists ( node *s, list OPEN, list CLOSED ){
node op;
node cl;
op = begin(OPEN);
cl = begin(CLOSED);
int x;

for(; op != end(OPEN); x++)
{
    if( (*(*op)) == (*s) )
    {
        break;
    }
}

2 个答案:

答案 0 :(得分:2)

您需要为node类型定义比较运算符:

bool operator!=( const node& lhs, const node& rhs );

编辑:

只需定义一个相等比较,然后用它来定义不等式:

bool operator==( const node& lhs, const node& rhs ) {
    return ...; // whatever
}

bool operator!=( const node& lhs, const node& rhs ) {
    return !( lhs == rhs );
}

此外,除非您访问私人成员,否则这些不必是成员函数。

答案 1 :(得分:0)

op != end(OPEN)

您正在尝试比较两个node结构,但没有为它们定义比较运算符。

我不确定你的代码甚至是什么。您是在尝试比较结构值还是指针?什么是end函数应该做什么?现在,它会导致未定义的行为,因为您正在取消引用未初始化的指针。