我有这个网格类,它分布在两个文件(mesh.h 和 mesh.cpp)上。现在它工作得很好,直到我向它添加了一个位置变量(Vector2d 类型)。当我添加变量时,它仍然正常运行,但是当我在其中一个函数中使用它时,它给了我一个错误,说我的一堆变量没有声明。让我告诉你我做了什么:
class Mesh{
public:
Mesh() {
Rectangle;
position = Vector2d(0,0);
}
Mesh(Vector2dVector Vertices) {
Set(Vertices);
position = Vector2d(0,0);
};
Vector2dVector GetVetices() { return vertices; };
Vector2d SetPosition(Vector2d p) { position = p; }
float GetVertexCount() { return vertexCount; };
float GetTriangleCount() { return triangleCount; }
void Set(Vector2dVector Vertices){
Triangulate::Process(Vertices,vertices);
vertexCount = vertices.size();
triangleCount = vertexCount/3;
};
void Render();
static Mesh Circle();
static Mesh Rectangle();
static Mesh Triangle();
private:
Vector2dVector vertices;
Vector2d position;
int triangleCount;
int vertexCount;
};
这运行正常,但是当我将它添加到文件 mesh.cpp 的函数渲染中时,它给了我一个错误
#include "mesh.h"
void Mesh::Render() {
glBegin (GL_TRIANGLES);
for (int i=0; i<GetTriangleCount(); i++) {
const Vector2d &p1 = vertices[i*3+0];
const Vector2d &p2 = vertices[i*3+1];
const Vector2d &p3 = vertices[i*3+2];
glVertex2f(position.GetX() + p1.GetX(),position.GetY() + p1.GetY());
glVertex2f(position.GetX() + p2.GetX(),position.GetY() + p2.GetY());
glVertex2f(position.GetX() + p3.GetX(),position.GetY() + p3.GetY());
}
glEnd ();
}
这是错误消息
In file included from main.cpp:3:
mesh.h: In constructor `Mesh::Mesh()':
mesh.h:5: error: no matching function for call to `Vector2d::Vector2d()'
triangulation.h:43: note: candidates are: Vector2d::Vector2d(const Vector2d&)
triangulation.h:46: note: Vector2d::Vector2d(float, float)
mesh.h: In constructor `Mesh::Mesh(Vector2dVector)':
mesh.h:10: error: no matching function for call to `Vector2d::Vector2d()'
所以在我从函数中删除所有 position.Get.. 方法调用后,它仍然给了我同样的错误,尽管在我添加和删除之前它没有。我已经使用电脑工作了大约 4 年了,我从未见过我的电脑会这样。如果有人可以向我解释我做错了什么,那将非常有帮助。顺便说一句,我使用的是 DevC++ 版本 4.9.9.2,所以我认为它与此有关。
感谢阅读,抱歉太长了。