VS 2008 С++ ошибка C2059 и C2238

Я пытаюсь портировать программу/игру, разработанную в linux/g++, чтобы она работала на Windows 7 VS 2008 C++. Программа использует такие библиотеки, как OpenGL, SDL и Boost.

Я решил много ошибок, но я как бы застрял на этой.

Я получаю код ошибки C2059 и C2238. Фактические сообщения об ошибках:

------ Build started: Project: Asteroid Blaster, Configuration: Release Win32 ------
Compiling...
WeaponDisplay.cpp
Weapon.cpp
ViewFrustum.cpp
Vector3D.cpp
UDP_Server.cpp
d:\College\AsteroidBlaster\Utility/ViewFrustum.h(40) : error C2059: syntax error : ';'
d:\College\AsteroidBlaster\Utility/ViewFrustum.h(40) : error C2238: unexpected token(s) preceding ';'
d:\College\AsteroidBlaster\Utility/ViewFrustum.h(41) : error C2059: syntax error : ';'
d:\College\AsteroidBlaster\Utility/ViewFrustum.h(41) : error C2238: unexpected token(s) preceding ';'
UDP_Client.cpp
d:\College\AsteroidBlaster\Utility/ViewFrustum.h(40) : error C2059: syntax error : ';'
d:\College\AsteroidBlaster\Utility/ViewFrustum.h(40) : error C2238: unexpected token(s) preceding ';'
d:\College\AsteroidBlaster\Utility/ViewFrustum.h(41) : error C2059: syntax error : ';'
d:\College\AsteroidBlaster\Utility/ViewFrustum.h(41) : error C2238: unexpected token(s) preceding ';'
TractorBeamShot.cpp

Файл ViewFrustum.h выглядит следующим образом:

  /**
   * viewFrustum: It's got useful functions to cull items that aren't in your view frustum
   * 
   * 2-7-11
   * CPE ---
   */

  #ifndef __VIEW_FRUSTUM_H__
  #define __VIEW_FRUSTUM_H__

  #include "Items/Object3D.h"
  #include "Utility/Plane.h"
  #include "Utility/Matrix4.h"
  #include <vector>
  #include <set>

  class ViewFrustum {
     public:

        ViewFrustum();
        virtual ~ViewFrustum();

        /* Takes in a list of all the Object 3D's around, and culls them down to only the ones
         * that are inside the view frustum.
         */
        virtual std::list<Drawable*>* cullToViewFrustum(std::vector<Drawable*>* all, bool skipParticles);
        virtual std::list<Object3D*>* cullToViewFrustum(std::vector<Object3D*>* all);

        /* Prints out details about all of the planes of the view frustum.
         */
        virtual void print();

     private:
        Matrix4 projMatrix;
        Matrix4 modelViewMatrix;
        Plane* top;
        Plane* bottom;
        Plane* left;
        Plane* right;
        Plane* near;
        Plane* far;

        /** 
         * A modified version of chedDrawableOutside, used by the AI. This stops the
         * AI from targeting Drawable objects which are slightly outside the field
         * of view, which still need to be drawn.
         */
        bool checkTargetableOutside(Drawable* obj);

        /* Returns true if the Drawable object is completely outside of the 
         * view frustum planes.
         * Returns false if it's even part-way inside.
         */
        virtual bool checkDrawableOutside(Drawable* obj);
  };

  #endif 

Линии нарушения (40-41):

  Plane* near;
  Plane* far;

Это немного сбивает с толку, потому что объект ViewFrustum уже скомпилирован, но когда он попадает в UDP_Server.cpp и UDP_Client.cpp, он выдает ошибку. Я не уверен, имеет ли это значение, но классы UDP используют модули Boost aiso и сериализации. Я знаю, что Boost иногда выдает странные предупреждения, но я не уверен, что Boost должен что-то делать с этой ошибкой.

Если кто-нибудь знает, почему это так, или если вам нужно больше кода, пожалуйста, дайте мне знать.


person Ryuho Kudo    schedule 22.05.2011    source источник


Ответы (1)


Скорее всего, вы включаете заголовок окна перед этим, а near и far определены где-то там. Это (устаревшие) вещи из 16-битной эпохи.

См. этот связанный вопрос Есть ли простой способ запретить windows.h создавать ближний и дальний макрос? для обходных путей.

person Mat    schedule 22.05.2011
comment
Изменение имен переменных на *Plane (т.е. NearPlane) исправило эту ошибку. Спасибо! - person Ryuho Kudo; 22.05.2011