只有一个错误,错误计数超过100

时间:2013-07-17 03:30:35

标签: c++

我在VS中有一个C ++项目,或多或少有100个文件(每个文件都是一个类)。我几天前修改了一个,添加了一些声明,现在我无法编译,它给出了很多错误,最后这个:

  

错误计数超过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在错误列表输出中没有显示错误。我完全相信我忘记了;或类似的东西。

我该怎么办?此外,我正在处理很多东西,我忘了我修改了哪个文件。我浏览了大部分内容并找不到任何内容。

以下是完整列表: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 个答案:

答案 0 :(得分:4)

滚动到错误列表的顶部,然后处理该错误列表。如果您在Visual Studio中,则可以编译它并按Ctrl-Shift-F12。

如果你在语法上犯了一些错误(我通常的一个是无法匹配的引号或括号),编译器可能会失去它的上下文,所以从那一点开始的一切都变得难以理解。您将通过唯一方式来纠正发现的第一个错误;然后 - 如果仍有错误 - 下一个。在某些时候,你会发现你所做的事情,其余的错误将神奇地消失。

答案 1 :(得分:2)

欢迎来到精彩的c ++错误世界。

当面对这样的事情时,从报告的第一个错误开始(查看编译器的输出)。然后重新编译。重复,直到没有错误。

有很多不同的语法错误会完全破坏文件的其余部分。这些包括声明中的错误类型,缺少分号和缺少大括号。

我看到超过200个错误因一个字符修复而消失。

此外,如果您在一个头文件中忘记了分号或括号,则可能会在下一个包含的标题中导致错误。我在windows.h中遇到了非常糟糕的错误,因为我在它之前已经包含了我的标题并忘记了某些内容。

答案 2 :(得分:1)

当您转储(带注释的)预处理输出并查看编译器获取的信息时,解决棘手的编译器错误问题(例如您所描述的问题)会变得更容易 cl.exe获取/E参数,以便将预处理的输出转储到stdout(see also this SO answer)。如果您使用它,并查看该上下文中的错误,则应该清楚。

'Player': undeclared identifier这样的错误显示在您认为您正在定义该标识符的文件中,可能是由循环依赖引起的。例如,PlayerController.h是否包含对Player类的引用而没有前向声明?

答案 3 :(得分:0)

源控制是关键。根据您的评论和额外代码,请发布player.h内容。

一般来说,在这种可怕的情况下,我会通过评论项目的大部分来进行二分查找。

包含在几个cpp中的h文件中的错误通常更容易因为一个小错误而产生大量错误。 cpp解析问题仅影响cpp。在h文件中查找错误。

同样一般的建议,尝试将所有h文件引用保留在cpp文件中,并将h文件中对h文件的引用限制为绝对最小值,这将减少包括恶梦。如你所见,player.h包含大量的h文件。他们中的每一个都可能是罪魁祸首,我建议逐个对它们进行评论并等待有关未定义符号的错误,而不是您现在看到的错误。这意味着您不再有解析错误,现在缺少定义(因此错误发生在您注释掉的文件中或包含在其中的某个文件中...)。