2

私は多かれ少なかれ100個のファイルを持つVSのC++プロジェクトを持っています(各ファイルはクラスです)。数日前にいくつかの宣言を追加して修正しましたが、今ではコンパイルできず、多くのエラーが発生し、最後に次のエラーが発生します。

エラー数が 100 を超えています。コンパイルの停止

エラーを投稿するのは無意味に思えますが、ここにいくつかあります (すべてほとんど同じです)。

error C2275: 'btTransform' : illegal use of this type as an expression  
error C2275: 'btVector3' : illegal use of this type as an expression
error C2275: 'btVector3' : illegal use of this type as an expression    
error C2275: 'btVector3' : illegal use of this type as an expression    
error C2504: 'Platform' : base class undefined
error C2535: 'btAlignedObjectArray<T>

上記のエラーのほとんどはエラーであってはならず、IntelliSense はエラー リストの出力にエラーを表示しないことに注意してください。そして、私はa;または同様のものを忘れたと確信しています。

私は何をすべきか?また、私は多くのものを扱っていて、どのファイルを変更したか忘れてしまいました。それらのほとんどを閲覧しましたが、何も見つかりませんでした。

完全なリストは次のとおりです: http://pastebin.com/1CD9fGgn (長すぎてここには収まりません)

リクエストに応じて:

Player.h

#pragma once
#include <Ogre.h>
#include "BtOgreGP.h"
#include "BtOgrePG.h"
#include <OISKeyboard.h>
#include <OISJoyStick.h>
#include "BulletCollision\CollisionDispatch\btGhostObject.h"
#include "balance.h"
#include "WorldGenerator.h"
#include "Keys.h"
#include "PlayerController.h"

using namespace Ogre;

class Player
{
public:
    Player(Root*, SceneManager*, RenderWindow*);
    ~Player(void);
    Camera* mCamera;
    void update(const FrameEvent&);
    bool isTouchingBelow();
//  bool isJumping();
    btPairCachingGhostObject* getGhostObject()
    {
        return mGhostObject;
    }
    void clearObjectTouchingNormal()
    {
        mNormals->clear();
    }
    void addObjectTouchingNormal(btVector3* vector)
    {
        mNormals->push_back(*vector);
    }
    btAlignedObjectArray<btVector3> getObjectTouchingNormal()
    {
        return *mNormals;
    }
private:
    btAlignedObjectArray<btVector3>* mNormals;
    double mTimeLastJump;
    WorldGenerator* mGenerator;
    bool mPressJumpLastUpdate;
//  btAlignedObjectArray<btVector3> getObjectTouchingNormal();
    Vector3 mLastVectorVelocity;
    //SceneNode* mCameraHelper;
    SceneNode* mMainNode;
    SceneNode* mBodyNode;
    SceneNode* mCameraPivot;
    SceneNode* mCameraYaw;
    SceneNode* mCameraPitch;
    SceneNode* mCameraHolder;
    SceneManager* mSceneManager;
    BtOgre::DebugDrawer* mDebugDrawer;
    //btRigidBody* mPlayerBody;
    btQuaternion* mDefaultQuaternion;
    Vector3 mStartPosition;
    PlayerController* mKinematicController;
    btPairCachingGhostObject* mGhostObject;
    //bool mIsJumping;
    Radian mLastRotation;
    btVector3 mBodyDimensions;
    /*bool mCameraCenterMovementFlag;
    Radian mCameraCenterYaw;*/
};

class ClosestNotMe : public btCollisionWorld::ClosestRayResultCallback
{
protected:
    btRigidBody* mMe;
public:
    ClosestNotMe (btRigidBody* me) : btCollisionWorld::ClosestRayResultCallback(btVector3(0.0, 0.0, 0.0), btVector3(0.0, 0.0, 0.0))
    {
        mMe = me;
    }

    virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult& rayResult,bool normalInWorldSpace)
    {
        if (rayResult.m_collisionObject == mMe)
            return 1.0;

        return btCollisionWorld::ClosestRayResultCallback::addSingleResult (rayResult, normalInWorldSpace);
    }
};

Globals.h

#pragma once
#include <Ogre.h>
#include <vector>
#include "Player.h"

enum GameDifficulty
{
    GD_EASY,
    GD_NORMAL,
    GD_HARD
};

class GlobalVariables
{
public:
    static std::vector<Player*> players;
};
4

4 に答える 4

4

エラー リストの一番上までスクロールし、そのエラーに対処します。Visual Studio を使用している場合は、コンパイルして Ctrl-Shift-F12 キーを押すことができます。

構文にエラーがあると (私の通常のエラーは引用符または波括弧の不一致です)、コンパイラはそのコンテキストを失う可能性があるため、その時点以降のすべてが理解できなくなります。それ を乗り越える唯一の方法は、見つかった最初のエラーを修正することです。そして、まだエラーがある場合は、次のエラーです。ある時点で、自分が行ったことがわかり、残りのエラーは魔法のように消えます。

于 2013-07-17T04:24:40.553 に答える
1

(注釈付きの)前処理された出力をダンプし、コンパイラが取得している情報を見ると、 説明したようなトリッキーなコンパイラエラーの問題を解決するのがはるかに簡単になります。前処理された出力を stdout にダンプするために引数をcl.exe取ります( this SO answer も参照してください)。それを使用し、そのコンテキストでエラーを確認すると、明確になるはずです。/E

'Player': undeclared identifierその識別子を定義していると思われるファイルに表示されるようなエラーは、循環依存関係が原因である可能性があります。たとえば、前方宣言のないクラスPlayerController.hへの参照が含まれていますか?Player

于 2013-07-17T04:38:47.720 に答える
0

ソース管理が重要です。コメントと余分なコードに基づいて、player.h のコンテンツも投稿してください。

一般に、このような恐ろしいケースでは、プロジェクトの大部分をコメントアウトしてバイナリ検索を行います。

いくつかの cpps に含まれる h ファイルのエラーは、通常、1 つの小さなミスから多くのエラーが発生する可能性が高くなります。cpp 解析の問題は、cpp にのみ影響します。h ファイルでエラーを探します。

また、一般的なアドバイスとして、cpp ファイル内のすべての h ファイル参照を保持し、h ファイルから h ファイルへの参照を最小限に制限するようにしてください。これにより、インクルードの悪夢が減少します。ご覧のとおり、player.h には大量の h ファイルが含まれています。それらのそれぞれが原因である可能性があります。1 つずつコメントして、現在表示されているエラーではなく、未定義のシンボルに関するエラーを待つことをお勧めします。これは、解析エラーがなくなり、定義が欠落していることを意味します (したがって、エラーは、コメントアウトしたファイルまたはそれに含まれるファイルのいずれかにあります...)。

于 2013-07-17T04:18:55.080 に答える