【发布时间】:2012-04-12 07:45:45
【问题描述】:
我有两个向量,我想用第二个填充第一个。向量声明如下:
vector<Vec3> firstVector;
其中 Vec3 是具有浮点 x、y、z 的结构。 我试过用 assign 喜欢这个:
secondVector.assign(firstVector.begin(), firstVector.end());
但它停止并抱怨 end() 有问题。 我也尝试过推回,但它当然不起作用。
正如我之前阅读的那样,我应该用assign来做,但我不知道如何正确解决它。
编辑:
insert和assign的错误信息是一样的:
这个 0x00000000 ... std::vector > * const
[size] CXX0030:错误:无法评估表达式
[容量] CXX0030:错误:无法评估表达式
它指向Visual Studio的向量文件,以迭代器结束返回。使用 insert 它指向迭代器开始。
代码:
第一个 Vector 也是结构体的一部分:
struct o3DModel
{
vector<Vec3> v_Vertices;
};
struct Vec3 {
public:
Vec3() {}
Vec3(float X, float Y, float Z)
{
x = X;
y = Y;
z = Z;
}
float x, y, z;
};
我像这样在我的应用程序类中声明上面的“o3DModel”结构并将其发送到我的加载程序类:
o3DModel *tfTable;
void TheApp::Init()
{
objLoader->ImportOBJ(tfTable, "testcube.obj");
}
objLoader 类,我成功填充了“v_Vertices”向量,其中“oModel”是发送的“tfTable”:
bool OBJLoader::ImportOBJ(o3DModel *oModel, char *strFileName)
{
FillObjData(oModel);
...
return true;
}
void OBJLoader::FillObjData(o3DModel *oModel)
{
oModel->v_Vertices.insert(oModel->v_Vertices.begin(), v_Vertices.begin(), v_Vertices.end());
// This here with insert
outFile2 << oModel->v_Vertices[0].x << "\n";
}
希望这会有所帮助。
【问题讨论】:
-
你的代码应该可以工作(尽管我不同意你“应该用assign来做”)。您能发布您收到的确切错误消息吗?
-
secondVector是如何声明的,错误信息到底是什么? (另外,一个简单的secondVector = firstVector也会做同样的事情)。 -
我知道我应该发布错误消息。我用它编辑我的问题。
-
您正在取消引用 NULL 指针。问题不在于您向我们展示的代码,而在于您没有向我们展示的代码。请将您的程序缩减为仍然显示错误的最小程序,然后将该非常小的完整程序发布到您的问题中。请参阅sscce.org 了解更多信息。
-
如果不是完整的程序,但我会减少所有内容并发布它。