为什么不能运算符!=进行转换?
Why can't operator!= do the conversion?
我有以下代码出现错误:
(Visual Studio 错误:)错误5 错误 C2678:二进制"!=":找不到采用类型为"节点"的左侧操作数的运算符(或者没有可接受的转换)
template <class C, class T>
C find2 ( C first , C last, T c )
{
//
while ( first != last && *first != c )
{
++first;
}
return first;
}
struct Node
{
Node(int a ,Node* b):val(a),next(b){};
int val;
Node* next;
};
template <class T>
struct node_wrap
{
T* ptr;
node_wrap ( T* 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;}
};
bool operator== ( const Node& node, int n )
{
return node.val == n;
}
int main()
{
Node* node1=new Node(3,NULL);
Node* node2=new Node(4,NULL);
node1->next = node2;
find2 ( node_wrap<Node>(node1), node_wrap<Node>(), 3) ) ;
delete node1;
delete node2;
return 0;
}
这段代码有什么问题?
Iterator
的类型是node_wrap<Node>
,所以*first
在这里返回一个Node
:
while ( first != last && *first != c )
它没有!=
运算符将其与c
的类型进行比较,即int
。你可能的意思是:
while ( first != last && first->val != c )
我建议使用这种方法来定义operator==
和operator!=
,将Node
与int
进行比较,因为它们是根本不同的类型,不应该相互比较。
您正在尝试将Node
与int
进行比较(这是在执行*first != c
时在函数find2
中完成的)。
虽然您提供了将Node
与int
进行比较的operator==
,但您尚未提供执行相同操作的operator!=
。如果你添加一个,这应该有效。
相关文章:
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 为什么此指针值不能转换为整数的规则是什么?
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- 不能在 if 语句 - c++ 中使用 void func 直接将字符串转换为大写
- 用户定义的转换不能在C++中使用static_cast
- 不能将字符转换为整数吗?
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 为什么我们不能将使用异或运算找到的整数转换为字符?
- 我把我的编译器从32位转换为64位,但我仍然不能使用超过2GB:(为什么
- 为什么我们不能使用整数到字符串直接转换,但可以按位到字符串?
- 为什么不能指向指针,在没有强制转换的情况下访问结构成员?
- 不能(隐式地)从字符**转换为常量字符**吗?
- 类型"const char[2]"的值不能隐式转换为"int"错误C++
- 为什么用户定义的转换函数模板不能有推导的返回类型?
- 不能将结构push_back() 转换为 std::vector<std::shared_ptr<theStruct>> theVector
- 不能返回派生的类(无法转换)
- 已弃用从字符串常量到“char*”的转换:不能使用该常量
- C样式强制转换可以处理的转换,但C++强制转换不能
- 从char*到wchar*的转换不能正常工作