VS 2008 C ++ ошибка C2059 и C2238 - PullRequest
2 голосов
/ 22 мая 2011

Я пытаюсь портировать программу / игру, которая была разработана в 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 obj уже скомпилирован, но когда он попадает в UDP_Server.cpp и UDP_Client.cpp, он выдает ошибку. Я не уверен, имеет ли это значение, но классы UDP используют модули aiso и сериализации Boost. Я знаю, что Boost иногда выдает странные предупреждения, но я не уверен, что Boost должен что-то делать с этой ошибкой.

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

1 Ответ

4 голосов
/ 22 мая 2011

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

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

...