我收到5个编译错误
C2036:'int(*)[]':未知大小
所有来自矢量类的各个地方。
#include <gl\glew.h>
#include "Vector2.h"
#include "Vector3.h"
#include "WFObjModel.h"
#include <vector>
#include <memory>
using namespace math;
using std::vector;
using std::string;
using io::WFObjModel;
using std::unique_ptr;
class Mesh
{
private:
GLuint textureID;
unique_ptr<vector<Vector3<float>>> m_vertices;
unique_ptr<vector<Vector3<float>>> m_normals;
unique_ptr<vector<Vector2<float>>> m_textureCoordinates;
unique_ptr<vector<int[]>> m_indices;
public:
Mesh(unique_ptr<vector<Vector3<float>>> vertices,
unique_ptr<vector<Vector3<float>>> normals,
unique_ptr<vector<Vector2<float>>> textureCoordinates,
unique_ptr<vector<int[]>> indices);
Mesh(Mesh&& other){
m_vertices = std::move(other.m_vertices);
m_normals = std::move(other.m_normals);
m_textureCoordinates = std::move(other.m_textureCoordinates);
m_indices = std::move(other.m_indices);
}
Mesh& operator=(Mesh&& other)
{
m_vertices = std::move(other.m_vertices);
m_normals = std::move(other.m_normals);
m_textureCoordinates = std::move(other.m_textureCoordinates);
m_indices = std::move(other.m_indices);
return *this;
}
我已经查看了围绕此问题的其他答案,但已接受的解决方案似乎不适用。
error C2036: 'Agent *const ' : unknown size in 'vector' class 和 Forward declaration error when defining a vector type?
似乎暗示错误是由于编译器没有存储在向量中的类型的完整定义。我有一个包含头文件的模板类存储在向量中,但我猜这与模板类的编译方式有关吗?
我似乎无法为模板class Vector3<float>
添加前向声明,而编译器并不认为我正在尝试专门化模板。
答案 0 :(得分:4)
你的问题来自这一行:
unique_ptr<vector<int[]>> m_indices;
您应该使用stl容器,在这种情况下,它可以是vector
的向量另外,为什么在这种情况下你需要unique_ptr?矢量支持移动语义,你可以只有一个
vector<vector<int>> m_indices;
关于移动构造函数的额外提示,通常的做法就是这样实现它们:
Mesh(Mesh&& other)
: m_vertices(std::move(other.m_vertices)
, m_normals(std::move(other.m_normals))
, textureCoordinates(std::move(other.m_textureCoordinates))
, indices(std::move(other.m_indices))
{ }