C ++错误C3646,C2059和C2238 Visual Studio 2015(社区)

时间:2015-10-27 11:57:23

标签: c++ visual-studio-2015

当我尝试编译为静态库时,我已经尝试了一段时间(徒劳)来追踪在“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();
}

谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

你有一个循环包含,其中PolygonGameObject.h包含#include "CollisionData.h",反之亦然。这是不可能的。

我无法在CollisionData.h中看到任何PolygonGameObject,因此您只需从该标题中删除不需要的包含。