1

完全なエラー メッセージ:

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

[V]C++ の世界は初めてです。Programing Game AI by Exampleの本を読んでいて、出版社のサイトで入手できるソースコードを研究/分析しようとしていました。

ソース コード全体が VS8 で記述されているようですが、私は VS12 Express エディションを使用しています。プロジェクトの変換に問題はないようですが、すべてのプロジェクトで 4 つの警告が表示されます (以下を参照)。

しかし、問題は、私が持っている基本的な知識は、強く型付けされたリストの演算子のオーバーロードに関するものであると思われるコンパイルエラーが発生していることですが、それが真かどうかはわかりません。 .

エラー #1 のコード行:

Vector2D    CurrentWaypoint()const{assert(curWaypoint != NULL); return *curWaypoint;}

問題変数の宣言:

std::list<Vector2D>::iterator  curWaypoint;

コンストラクターを含む拡張コード スニペット:

//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++ を怖がっていますが、誰かが問題の内容とそれを修正する方法を教えてくれれば、自分で修正できます

エラー

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

これが問題になる場合に備えて、以下は、本のソースコードのすべてのプロジェクトに対して常に表示される警告です。

*一般的なソリューション変換の警告: * (注: 上記と同じプロジェクトではありません)

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). 
4

3 に答える 3

3

イテレータを NULL と比較することはできません。これが、これらのエラーが発生する理由です。そして、私の知る限り、何かに設定しない限り、イテレータが何かを指しているかどうかを確認する方法はありません。に設定するend()と、一種の NULL イテレータになります (end() はコンテナーの最後の要素の後の要素であるため、基本的に何も指しません)。

于 2013-01-12T14:19:06.280 に答える
0

との比較iteratorNULL無効です:

assert(curWaypoint != NULL);

私はあなたのすべてのコードを見たわけではありませんが、おそらくあなたはこれを次のものと比較するつもりですend():

assert(curWaypoint != m_WayPoints.end());

コンストラクターで初期化curWaypointするので、これは意図したとおりに機能するはずです。

于 2013-01-12T14:22:05.923 に答える
0

元のソース コードの私のコピーは、あなたのものとは少し異なります...

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

TBL: 私が持っているコードのコピーでは、反復子をテストしているのではなく、反復子が何を指しているかをテストしています。残念ながら、あなたと同じエラーが発生しています。

于 2013-02-07T03:01:22.480 に答える