C++ 为什么可以';t运算符!=你要转换吗?

C++ 为什么可以';t运算符!=你要转换吗?,c++,C++,我有以下错误代码: (Visual Studio错误:)错误5错误C2678:二进制“!=”:未找到接受类型为“Node”的左侧操作数的运算符(或没有可接受的转换) 模板 C find2(C first,C last,T C) { // while(first!=last&&*first!=c) { ++第一,; } 先返回; } 结构体类型 { 节点(inta,Node*b):val(a),next(b){}; int-val; 节点*下一步; }; 模板 结构节点 { T*ptr; node

我有以下错误代码:

(Visual Studio错误:)错误5错误C2678:二进制“!=”:未找到接受类型为“Node”的左侧操作数的运算符(或没有可接受的转换)

模板
C find2(C first,C last,T C)
{
//
while(first!=last&&*first!=c)
{
++第一,;
}
先返回;
}
结构体类型
{
节点(inta,Node*b):val(a),next(b){};
int-val;
节点*下一步;
};
模板
结构节点
{
T*ptr;
node_wrap(T*p=0):ptr(p){}
节点和运算符*()常量{return*ptr;}
节点*运算符->()常量{return ptr;}
node_wrap&operator++(){ptr=ptr->next;返回*this;}
node_wrap操作符++(int){node_wrap tmp=*this;++*this;return tmp;}
布尔运算符==(const node_wrap&i)const{return ptr==i.ptr;}
布尔运算符!=(const node_wrap&i)const{return ptr!=i.ptr;}
};
布尔运算符==(常量节点和节点,整数n)
{
return node.val==n;
}
int main()
{
Node*node1=新节点(3,空);
Node*node2=新节点(4,空);
node1->next=node2;
find2(node_wrap(node1),node_wrap(),3));
删除节点1;
删除节点2;
返回0;
}

此代码有什么问题?

迭代器的类型为
node\u wrap
,因此
*首先
在此处返回一个
节点

    while ( first != last && *first != c )
它没有
=
运算符,将其与
c
类型进行比较,即
int
。你可能是说:

    while ( first != last && first->val != c )

与定义
操作符==
操作符的其他方法相比,我建议使用这种方法=节点
int
进行比较的代码>,因为它们是根本不同的类型,不应相互比较。

迭代器
属于
节点
类型,因此
*首先
在此处返回一个
节点

    while ( first != last && *first != c )
它没有
=
运算符,将其与
c
类型进行比较,即
int
。你可能是说:

    while ( first != last && first->val != c )

与定义
操作符==
操作符的其他方法相比,我建议使用这种方法=节点
int
进行比较的代码>,因为它们是根本不同的类型,不应相互比较。

您正在尝试将
节点
int
进行比较(这是在执行
*first!=c
时在函数
find2
中完成的)


虽然您提供了一个
操作符==
来比较
节点
int
,但您没有提供
操作符=以执行相同的操作。如果您添加了一个,这应该会起作用。

您正在尝试将
节点
int
进行比较(这是在执行
*first!=c
时在函数
find2
中完成的)


虽然您提供了一个
操作符==
来比较
节点
int
,但您没有提供
操作符=以执行相同的操作。如果你加上一个,这应该可以用。

Iterator是模板函数中的一个类型名。我只是在做一个测试。~我不会在实际项目中使用它。无论如何,谢谢你~ Iterator是模板函数中的一个类型名。我只是在做一个测试。~我不会在实际项目中使用它。无论如何,谢谢你~你是否在尝试复制
std::list
std::find
已经为你做了吗?:)不,我只是想试试书中的一些东西。你是不是想复制
std::list
std::find
已经为你做了什么?:)不,我只是想试试书中interjay说的:定义
bool操作符!=(const Node&Node,int n)
就运算符==()而言,您已经有了。interjay说的:定义
bool运算符!=(const Node&Node,int n)
根据您已有的运算符==()。