Проблема смешанных классов в Visual C ++ - PullRequest
0 голосов
/ 22 октября 2011

Я пытаюсь скомпилировать этот код, который был изначально написан для vs2005 и vs2008.Я получаю ошибки.Ниже приведен код.Кроме того, у меня есть эти заголовочные файлы, обеспечивающие поведение mixin, и они не содержат ошибок.

Ошибки:

syntax error missing ';' before '<' LINE 86
missing type specifier - int assumed. Note: C++ does not support default int. LINE 86
'SimpleVehicleMB_1' undeclared identifier LINE 90
'AnnotationMixin' unspecialized class template cannot be used as a tempalte argument for tempalte parameter 'Super', expected a real type. LINE 94
'AnnotationMixin'  use of class template requires template argument list LINE 94
'SteerLibraryMixin' use of claas template requires template argument list LINE 101
#ifndef OPENSTEER_SIMPLEVEHICLE_MB_H
#define OPENSTEER_SIMPLEVEHICLE_MB_H


#include "AbstractVehicle.h"
#include "SteerLibrary.h"
#include "Annotation.h"


namespace OpenSteer {


    // ----------------------------------------------------------------------------


    // SimpleVehicle_1 adds concrete LocalSpace methods to AbstractVehicle     LINE 86
    typedef LocalSpaceMixinMB<AbstractVehicle> SimpleVehicleMB_1;


    // SimpleVehicle_2 adds concrete annotation methods to SimpleVehicle_1  LINE 90
    typedef AnnotationMixin<SimpleVehicleMB_1> SimpleVehicleMB_2;


    // SimpleVehicle_3 adds concrete steering methods to SimpleVehicle_2  LINE 94
    typedef SteerLibraryMixin<SimpleVehicleMB_2> SimpleVehicleMB_3;


    // SimpleVehicle adds concrete vehicle methods to SimpleVehicle_3
    class SimpleVehicleMB : public SimpleVehicleMB_3

   {

        public:

            // constructor LINE 101 is the '{' above
            SimpleVehicleMB ();

            // destructor
            ~SimpleVehicleMB ();

            // reset memory backend
            static void resetBackend()
            {
                MemoryBackend::reset();
            }

            // reset vehicle state
            void reset (void)
            {
                // reset LocalSpace state
                resetLocalSpace ();

                // reset SteerLibraryMixin state
                // (XXX this seems really fragile, needs to be redesigned XXX)
                SimpleVehicleMB_3::reset ();

                setMass (1);          // mass (defaults to 1 so acceleration=force)
                setSpeed (0);         // speed along Forward direction.

                setRadius (0.5f);     // size of bounding sphere

                setMaxForce (0.1f);   // steering force is clipped to this magnitude
                setMaxSpeed (1.0f);   // velocity is clipped to this magnitude

                // reset bookkeeping to do running averages of these quanities
                resetSmoothedAcceleration ();
            }

            // get/set mass
            float mass (void) const {return mb->mass(mb_id);}
            float setMass (float m) {return mb->setMass(mb_id, m);}

            // get velocity of vehicle
            Vec3 velocity (void) const {return forward() * speed();}

            // get/set speed of vehicle  (may be faster than taking mag of velocity)
            float speed (void) const {return mb->speed(mb_id);}
            float setSpeed (float s) {return mb->setSpeed(mb_id, s);}

            // size of bounding sphere, for obstacle avoidance, etc.
            float radius (void) const {return mb->radius(mb_id);}
            float setRadius (float m) {return mb->setRadius(mb_id, m);}

            // get/set maxForce
            float maxForce (void) const {return mb->maxForce(mb_id);}
            float setMaxForce (float mf) {return mb->setMaxForce(mb_id, mf);}

            // get/set maxSpeed
            float maxSpeed (void) const {return mb->maxSpeed(mb_id);}
            float setMaxSpeed (float ms) {return mb->setMaxSpeed(mb_id, ms);}


            // apply a given steering force to our momentum,
            // adjusting our orientation to maintain velocity-alignment.
            void applySteeringForce (const Vec3& force, const float deltaTime);

            // the default version: keep FORWARD parallel to velocity, change
            // UP as little as possible.
            virtual void regenerateLocalSpace (const Vec3& newVelocity,
                                               const float elapsedTime);

            // alternate version: keep FORWARD parallel to velocity, adjust UP
            // according to a no-basis-in-reality "banking" behavior, something
            // like what birds and airplanes do.  (XXX experimental cwr 6-5-03)
            void regenerateLocalSpaceForBanking (const Vec3& newVelocity,
                                                 const float elapsedTime);

            // adjust the steering force passed to applySteeringForce.
            // allows a specific vehicle class to redefine this adjustment.
            // default is to disallow backward-facing steering at low speed.
            // xxx experimental 8-20-02
            virtual Vec3 adjustRawSteeringForce (const Vec3& force,
                                                 const float deltaTime);

            // apply a given braking force (for a given dt) to our momentum.
            // xxx experimental 9-6-02
            void applyBrakingForce (const float rate, const float deltaTime);

            // predict position of this vehicle at some time in the future
            // (assumes velocity remains constant)
            Vec3 predictFuturePosition (const float predictionTime) const;

            Vec3 smoothedAcceleration (void) {return mb->smoothedAcceleration(mb_id);}
            Vec3 resetSmoothedAcceleration (const Vec3& value = Vec3::zero)
            {
                mb->setSmoothedAcceleration(mb_id, value);
                return value;
            }

            // give each vehicle a unique number
            int serialNumber;
            static int serialNumberCounter;

            // draw lines from vehicle's position showing its velocity and acceleration
            void annotationVelocityAcceleration (float maxLengthA, float maxLengthV);
            void annotationVelocityAcceleration (float maxLength)
            {annotationVelocityAcceleration (maxLength, maxLength);}
            void annotationVelocityAcceleration (void)
            {annotationVelocityAcceleration (3, 3);}

            // set a random "2D" heading: set local Up to global Y, then effectively
            // rotate about it by a random angle (pick random forward, derive side).
            void randomizeHeadingOnXZPlane (void)
            {
                setUp (Vec3::up);
                setForward (RandomUnitVectorOnXZPlane ());
                setSide (localRotateForwardToSide (forward()));
            }
        };


} // namespace OpenSteer


// ----------------------------------------------------------------------------
#endif // OPENSTEER_SIMPLEVEHICLE_MB_H

1 Ответ

1 голос
/ 22 октября 2011

Ваше сообщение об ошибке (как написано, когда я пишу это) говорит:

Синтаксическая ошибка отсутствует ';'before '<' </p>

В представленном вами коде первая '<' находится в этой строке: </p>

typedef LocalSpaceMixinMB<AbstractVehicle> SimpleVehicleMB_1;

Именно в этой строке и возникает проблема сам подтверждается последующими сообщениями с жалобами на SimpleVehicleMB_1.

Таким образом, очевидно, что шаблон и / или тип не определены в данный момент.

С информацией, предоставленной как IПишу это, скорее всего, это шаблон LocalSpaceMixinMB, который не определен.Мол, вы забыли включить соответствующий заголовок.В качестве альтернативы может возникнуть проблема с заголовком "AbstractVehicle.h".

Но вы не показываете соответствующий код, так что единственное, что нужно добавить (пока) - помнить, что причина ошибкинаходится либо в точке, где ошибка проявляется, либо где-то ранее в предварительно обработанном исходном коде модуля перевода, например, в ранее включенном заголовке.

Cheers & hth.,

...