gpt4 book ai didi

c++ - 二进制表达式 ('int_node' 和 const 'int_node' 的无效操作数)

转载 作者:行者123 更新时间:2023-11-30 01:21:43 26 4
gpt4 key购买 nike

我是一个C++初学者,身边有很多问题。我已经定义了 int_node!= 运算符,但是当我编译这段代码时,显示错误:

invalid operands to binary expression ('int_node' and const 'int_node')

我使用的IDE是xcode 4.6。

下面是我的全部代码

typedef struct int_node{
int val;
struct int_node *next;
} int_t;

template <typename Node>
struct node_wrap{
Node *ptr;

node_wrap(Node *p = 0) : ptr(p){}
Node &operator *() const {return *ptr;}
Node *operator->() const {return ptr;}

node_wrap &operator++() {ptr = ptr->next; return *this;}
node_wrap operator++(int) {node_wrap tmp = *this; ++*this; return tmp;}

bool operator == (const node_wrap &i) const {return ptr == i.ptr;}
bool operator != (const node_wrap &i) const {return ptr != i.ptr;}
} ;

template <typename Iterator, typename T>
Iterator find(Iterator first, Iterator last, const T& value)
{
while (first != last && *first != value) // invalid operands to binary experssion ('int_node' and const 'int_node')
{
++first;
return first;
}
}

int main(int argc, const char * argv[])
{
struct int_node *list_head = nullptr;
struct int_node *list_foot = nullptr;
struct int_node valf;
valf.val = 0;
valf.next = nullptr;
find(node_wrap<int_node>(list_head), node_wrap<int_node>(list_foot), valf);

return (0);
}

最佳答案

我的编译器说

"1>main.cpp(28): error C2676: binary '!=' : 'int_node' does not define this operator or a conversion to a type acceptable to the predefined operator"

这是真的。

我们可以根据 == 定义 != 例如为您丢失的 int_node

bool operator == (const int_node &i) const {return val == i.val;}
bool operator != (const int_node &i) const {return !(*this==i);}

您需要定义运算符 - 他们是否也应该检查节点?

顺便说一句,你打算无论如何都要返回 first 吗?

while (first != last && *first != value)
{
++first;
return first;
// ^^^^^
// |||||
}

关于c++ - 二进制表达式 ('int_node' 和 const 'int_node' 的无效操作数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17728229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com