错误计数超过100,只有一个错误
error count exceeds 100 with just one error
我在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 "BulletCollisionCollisionDispatchbtGhostObject.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;
};
滚动到错误列表的顶部,并处理该错误。如果您在Visual Studio中,可以编译它并点击Ctrl-Shift-F12。
如果你在语法上犯了一些错误(我通常的错误是一个不匹配的引号或大括号),编译器可能会丢失上下文,因此从那一点开始的所有内容都会变得难以理解;然后——如果还有错误的话——下一个。在某个时刻,你会发现你做了那件事,剩下的错误就会神奇地消失。
欢迎来到c++错误的奇妙世界。
当遇到类似的情况时,从报告的第一个错误开始(查看编译器的输出)。然后重新编译。重复,直到不再出现错误为止。
有很多不同的语法错误会完全破坏文件的其余部分。其中包括声明中的错误类型、缺少分号和缺少大括号。
我已经看到200多个错误随着一个字符的修复而消失。
此外,如果您在一个头文件中忘记了分号或大括号,则可能会在下一个包含的头文件中导致错误。我在windows.h中出现了非常严重的错误,因为我在它之前包含了我的头,但忘记了一些东西。
当您转储(带注释的)预处理输出并查看编译器获得的信息时,解决棘手的编译器错误问题(如您描述的问题)会变得更加容易。cl.exe
采用/E
参数,以便将经过预处理的输出转储到stdout(另请参阅此SO答案)。如果您使用它,并在该上下文中查看错误,它应该是清楚的。
在您认为正在定义该标识符的文件中出现类似'Player': undeclared identifier
的错误,很可能是由循环依赖性引起的。例如,PlayerController.h
是否包含对没有前向声明的Player
类的引用?
源代码管理是关键。根据您的评论和额外的代码,也请发布播放器.h的内容。
一般来说,在这种可怕的情况下,我会进行二进制搜索,并注释掉项目的大部分内容。
包含在几个cpp中的h文件中的错误通常更有可能从一个小错误中收集大量错误。cpp解析问题只会影响cpp。在h文件中查找错误。
此外,一般的建议是,尽量将所有h文件引用保留在cpp文件中,并将h文件中对h文件的引用限制在绝对最小值,这将减少包括噩梦。正如你所看到的,player.h包含了大量的h文件。它们中的每一个都可能是罪魁祸首,我建议逐一对它们进行注释,并等待关于未定义符号的错误,而不是您现在看到的错误。这意味着你不再有解析错误,现在有一个丢失的定义(因此错误在你注释掉的文件中或它包含的一个文件中…)。
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 处理程序的模块列表中有一个错误的模块"WebSocketModule"
- 编译器错误:函数调用在常量表达式中必须有一个常量值
- LNK2001尝试将我的主函数分离为主.cpp时,我有一个奇怪的错误
- 为什么有一个指向此代码行(第 7 行)的"no matching call for function"错误?
- 我在咖啡中添加了一个新层,但有一个关于"layer_param_"的错误
- 我在 c ++ 中有一个循环错误
- 为什么第三板有一个错误
- 我在代码中有一个错误,错误是:(智能感知:不允许抽象类类型"HourlyWorker"的对象:)
- 错误:在“(”标记之前进行预期的构造函数、析构函数或类型转换.即使我有一个构造函数
- 带有显式构造函数的智能指针使我有一个错误
- 我有一个与Irrlicht创建Cmakelist的错误
- 我的基本C 程序中有一个未指定的错误
- 它不是编译.我正在调用一个通过引用调用的函数,但有一个错误,无法将双*转换为双倍
- 得到错误"left of '.toString' must have class/struct/union",即使 toString 应该有一个合适的对象
- 我的调试器说我有一个隔离错误错误,但无法告诉我在哪里,在非常特殊的情况下发生
- 删除指向排序的字符串阵列的指针会在运行后会有一个错误
- 当我编译引用 std::ostream 时,我有一个奇怪的错误弹出