在.h:
enum collisionType {AB, BA, AoverB, AunderB};
struct Collision {
public:
collisionType type;
glm::vec2 point1;
glm::vec2 point2;
Collision(enum collisionType, glm::vec2, glm::vec2);
};
in .cpp:
Collision::Collision(enum collisionType collisType, glm::vec2 p1, glm::vec2 p2) : type(collisType), point1(p1), point2(p2)
{
}
使用它
std::vector<Collision> collisions;
glm::vec2 point1(11.0, 12.0);
glm::vec2 point2(12.0, 13.0);
collisions.push_back(Collision(AoverB, point1, point2));
获取错误C2512:&#39;碰撞&#39; :没有合适的默认构造函数,为什么?
答案 0 :(得分:1)
您可以阅读here类型T
的要求,使其更适合std::vector
。
默认构造不在那里列出。
我也尝试编译这个最小的代码示例,其中X没有默认构造函数,并且它与MSVC编译良好:
#include <vector>
struct X {
X(int a, int b) : A(a), B(b) {}
int A;
int B;
};
int main() {
std::vector<X> v;
v.push_back(X(10,20));
}
因此,问题必须在您的代码中的其他位置。
无论如何,你可能想要添加一个没有参数的构造函数来使你的Collission类“默认构造”,并让编译器满意:
struct Collision {
// Default constructor.
// Initialize data members to some init values.
Collision() {
...
}
PS 请注意,C ++中的struct
相当于class { public: ...
,因此您可以省略代码中的public:
行:它隐含于使用关键字struct
。
答案 1 :(得分:0)
以下代码编译得很好,这是其他问题。
#include <glm/vec2.hpp>
#include <vector>
enum collisionType {AB, BA, AoverB, AunderB};
struct Collision {
public:
collisionType type;
glm::vec2 point1;
glm::vec2 point2;
Collision(enum collisionType, glm::vec2, glm::vec2);
};
Collision::Collision(enum collisionType collisType, glm::vec2 p1, glm::vec2 p2) : type(collisType), point1(p1), point2(p2)
{
}
int main()
{
std::vector<Collision> collisions;
glm::vec2 point1(11.0, 12.0);
glm::vec2 point2(12.0, 13.0);
collisions.push_back(Collision(AoverB, point1, point2));
}