当我尝试编译为静态库时,我已经尝试了一段时间(徒劳)来追踪在“PolygonGameObject.h”中'checkCollision()'声明中抛出的以下错误的原因:
Error C3646 'checkCollision': unknown override specifier
Error C2059 syntax error: ')'
Error C2238 unexpected token(s) preceding ';'
为了追踪错误,我重命名了该函数,删除了所有函数参数,从有问题的函数中删除了所有内容(return语句返回由所需返回类型的默认构造函数创建的对象除外)。为简洁起见,我删除了原始程序中的所有内容,同时仍然导致相同的错误,以查找错误原因。 我正在使用在Windows 7上运行的Visual Studio 2015社区。我正在将源文件编译为静态库。下面是我用它生成错误的精简源文件:
CollisionData.h
#ifndef COLLISIONDATA_H
#define COLLISIONDATA_H
#include "Vec2D.h"
#include "PolygonGameObject.h"
#include <list>
struct CollisionData
{
double penetrationDepth;
Vec2D collisionNormal;
std::list<std::size_t> involvedIndicesA;
std::list<std::size_t> involvedIndicesB;
CollisionData();
CollisionData(double penetrationDepth, Vec2D collisionNormal, std::list<std::size_t> involvedIndicesA, std::list<std::size_t> involvedIndicesB);
~CollisionData();
static CollisionData noCollision();
};
#endif
CollisionData.cpp
#include "CollisionData.h"
using namespace std;
CollisionData::CollisionData()
{
}
CollisionData::CollisionData(double penetrationDepth, Vec2D collisionNormal,
list<size_t> involvedIndicesA, list<size_t> involvedIndicesB):
penetrationDepth(penetrationDepth), collisionNormal(collisionNormal),
involvedIndicesA(involvedIndicesA), involvedIndicesB(involvedIndicesB)
{
}
CollisionData::~CollisionData()
{
}
CollisionData CollisionData::noCollision()
{
return CollisionData(-1, Vec2D(0,0), list<size_t>(), list<size_t>());
}
PolygonGameObject.h
#ifndef POLYGONGAMEOBJECT_H
#define POLYGONGAMEOBJECT_H
#include "CollisionData.h"
class PolygonGameObject
{
protected:
double restitution;
double density;
double invMass;
public:
PolygonGameObject();
virtual ~PolygonGameObject();
static CollisionData checkCollision();
};
#endif
PolygonGameObject.cpp
#include "PolygonGameObject.h"
#include "CollisionData.h"
#include <limits>
#include <cmath>
#include <algorithm>
PolygonGameObject::PolygonGameObject()
{
}
PolygonGameObject::~PolygonGameObject()
{
}
CollisionData PolygonGameObject::checkCollision()
{
return CollisionData();
}
谢谢你的时间!
答案 0 :(得分:0)
你有一个循环包含,其中PolygonGameObject.h包含#include "CollisionData.h"
,反之亦然。这是不可能的。
我无法在CollisionData.h中看到任何PolygonGameObject
,因此您只需从该标题中删除不需要的包含。