首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误C2678:二进制'!=‘:找不到操作符

错误C2678:二进制'!=‘:找不到操作符
EN

Stack Overflow用户
提问于 2013-01-12 14:11:32
回答 3查看 2.4K关注 0票数 1

完全错误消息:

代码语言:javascript
复制
Error   1   error C2678: binary '!=' : no operator found which takes a left-hand operand of type 'const std::_List_iterator<_Mylist>' (or there is no acceptable conversion)    c:\ebooks\sourcecode\programing_game_ai_by_example\buckland_sourcecode\vs8 projects\buckland_chapter3-steering behaviors\path.h 54  1   Steering

我对VC++世界非常陌生。我正在阅读编程游戏人工智能的例子,并试图研究/分析源代码,这是可以在出版商的网站。

看起来整个源代码都是用VS8编写的,但我使用的是VS12速成版。项目转换似乎没有问题,期待4警告,我得到的所有项目(见下文)。

但问题是,我得到了一个编译错误,在我看来,我的基本知识是使用操作符重载强类型列表的,但我不确定它是否为真,也不知道如何修复它是否为真。

Error#1的代码行:

代码语言:javascript
复制
Vector2D    CurrentWaypoint()const{assert(curWaypoint != NULL); return *curWaypoint;}

问题变量的声明:

代码语言:javascript
复制
std::list<Vector2D>::iterator  curWaypoint;

扩展代码段,包括构造函数:

代码语言:javascript
复制
//constructor for creating a path with initial random waypoints. MinX/Y
  //& MaxX/Y define the bounding box of the path.
  Path(int    NumWaypoints,
       double MinX,
       double MinY,
       double MaxX,
       double MaxY,
       bool   looped):m_bLooped(looped)
  {
    CreateRandomPath(NumWaypoints, MinX, MinY, MaxX, MaxY);

    curWaypoint = m_WayPoints.begin();
  }


  //returns the current waypoint
  Vector2D    CurrentWaypoint()const{assert(curWaypoint != NULL); return *curWaypoint;}

  //returns true if the end of the list has been reached
  bool        Finished(){return !(curWaypoint != m_WayPoints.end());}

现在我不知道接下来该去哪里,但是列表和迭代器定义在WindowsUtils.h文件中。

我不会粘贴其他相同的错误,但是您可以访问整个Path.h文件这里

谁能告诉我怎么解决这个问题吗?我总是害怕c++,尤其是vc++,但是如果有人指导我解决这个问题,我可以自己解决。

误差

代码语言:javascript
复制
Error   1   error C2678: binary '!=' : no operator found which takes a left-hand operand of type 'const std::_List_iterator<_Mylist>' (or there is no acceptable conversion)    c:\ebooks\sourcecode\programing_game_ai_by_example\buckland_sourcecode\vs8 projects\buckland_chapter3-steering behaviors\path.h 54  1   Steering
Error   2   error C2678: binary '!=' : no operator found which takes a left-hand operand of type 'const std::_List_iterator<_Mylist>' (or there is no acceptable conversion)    c:\ebooks\sourcecode\programing_game_ai_by_example\buckland_sourcecode\vs8 projects\buckland_chapter3-steering behaviors\path.h 54  1   Steering
Error   3   error C2678: binary '!=' : no operator found which takes a left-hand operand of type 'const std::_List_iterator<_Mylist>' (or there is no acceptable conversion)    c:\ebooks\sourcecode\programing_game_ai_by_example\buckland_sourcecode\vs8 projects\buckland_chapter3-steering behaviors\path.h 54  1   Steering
Error   4   error C2678: binary '!=' : no operator found which takes a left-hand operand of type 'const std::_List_iterator<_Mylist>' (or there is no acceptable conversion)    c:\ebooks\sourcecode\programing_game_ai_by_example\buckland_sourcecode\vs8 projects\buckland_chapter3-steering behaviors\path.h 54  1   Steering
    5   IntelliSense: no operator "!=" matches these operands
            operand types are: const std::_List_iterator<std::_List_val<std::_List_simple_types<Vector2D>>> != int  c:\eBooks\SourceCode\programing_game_ai_by_example\Buckland_SourceCode\VS8 projects\Buckland_Chapter3-Steering Behaviors\Path.h 54  38  Steering

如果这很重要,下面是我为本书源代码中的每个项目保留的警告

*通用解决方案转换警告:*(注:与上述项目不同)

代码语言:javascript
复制
Conversion Report - WestWorld1.vcproj: 
Converting project file 'C:\eBooks\SourceCode\programing_game_ai_by_example\Buckland_SourceCode\VS8 projects\Buckland_Chapter2-State Machines\WestWorld1\WestWorld1.vcproj'. 
Web deployment to the local IIS server is no longer supported. The Web Deployment build tool has been removed from your project settings. 
Done converting to new project file 'C:\eBooks\SourceCode\programing_game_ai_by_example\Buckland_SourceCode\VS8 projects\Buckland_Chapter2-State Machines\WestWorld1\WestWorld1.vcxproj'. 
This application has been updated to include settings related to the User Account Control (UAC) feature of Windows Vista. By default, when run on Windows Vista with UAC enabled, this application is marked to run with the same privileges as the process that launched it. This marking also disables the application from running with virtualization. You can change UAC related settings from the Property Pages of the project. 
VCWebServiceProxyGeneratorTool is no longer supported. The tool has been removed from your project settings. 
MSB8012: $(TargetPath) ('C:\eBooks\SourceCode\programing_game_ai_by_example\Buckland_SourceCode\VS8 projects\Buckland_Chapter2-State Machines\WestWorld1\.\Debug\WestWorld1.exe') does not match the Linker's OutputFile property value '.\Debug/WestWorld1.exe' ('C:\eBooks\SourceCode\programing_game_ai_by_example\Buckland_SourceCode\VS8 projects\Buckland_Chapter2-State Machines\WestWorld1\Debug/WestWorld1.exe') in project configuration 'Debug|Win32'. This may cause your project to build incorrectly. To correct this, please make sure that $(TargetPath) property value matches the value specified in %(Link.OutputFile). 
MSB8012: $(TargetPath) ('C:\eBooks\SourceCode\programing_game_ai_by_example\Buckland_SourceCode\VS8 projects\Buckland_Chapter2-State Machines\WestWorld1\.\Release\WestWorld1.exe') does not match the Linker's OutputFile property value '.\Release/WestWorld1.exe' ('C:\eBooks\SourceCode\programing_game_ai_by_example\Buckland_SourceCode\VS8 projects\Buckland_Chapter2-State Machines\WestWorld1\Release/WestWorld1.exe') in project configuration 'Release|Win32'. This may cause your project to build incorrectly. To correct this, please make sure that $(TargetPath) property value matches the value specified in %(Link.OutputFile). 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-12 14:22:05

iteratorNULL进行比较是无效的:

代码语言:javascript
复制
assert(curWaypoint != NULL);

我还没有看过您所有的代码,但也许您打算将其与end()进行比较

代码语言:javascript
复制
assert(curWaypoint != m_WayPoints.end());

您可以在构造函数中初始化curWaypoint,因此这应该按照您的意愿工作。

票数 0
EN

Stack Overflow用户

发布于 2013-01-12 14:19:06

不能将迭代器与NULL进行比较,这就是获得这些错误的原因。据我所知,除非您将其设置为某物,否则无法检查是否和迭代器指向某物。将其设置为end()将使其类似于空迭代器(因为end()是容器中最后一个元素之后的元素,因此它基本上指向零)。

票数 3
EN

Stack Overflow用户

发布于 2013-02-07 03:01:22

我的原始源代码和你的有点不同.

代码语言:javascript
复制
  //returns the current waypoint
  Vector2D    CurrentWaypoint()const{assert(*curWaypoint != NULL); return *curWaypoint;}

TBL:在我所拥有的代码副本中,它不是测试迭代器,而是测试迭代器指向的内容。不幸的是,我得到了和你一样的错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14294116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档