我正在尝试创建一个包含多种数据类型和向量的数据树。到目前为止我所拥有的内容如下所示:
struct VertStruct{
double X, Y, Z;
};
struct FaceStruct{
int F1, F2, F3, F4;
};
struct FaceNormalStruct{
double X, Y, Z;
};
struct LODStruct{
std::vector<VertStruct> Verts;
std::vector<FaceStruct> Faces;
std::vector<FaceNormalStruct> FaceNormals;
};
struct ChunkStruct{
std::vector<LODStruct> LOD;
};
int main(){
std::vector<ChunkStruct> Chunk;
Chunk.resize(100);
for(int i = 0; i < 100; i++)
{
Chunk[i].LOD.resize(5);
for(int j = 0; j < 5; j++)
{
Chunk[i].LOD[j].Verts.resize(36);
Chunk[i].LOD[j].Faces.resize(25);
Chunk[i].LOD[j].FaceNormals.resize(25);
}
}
return 1;
}
现在这个编译很好,正是我想要的,但是,如果我尝试将值设置为:
int Number = 42;
Chunk[5].LOD[4].Verts[3] = Number;
然后我收到以下错误:
main.cpp|126|error: no match for 'operator=' in 'Chunk.std::vector<_Tp, _Alloc>::operator[] [with _Tp = ChunkStruct, _Alloc = std::allocator<ChunkStruct>](5u)->ChunkStruct::LOD.std::vector<_Tp, _Alloc>::operator[] [with _Tp = LODStruct, _Alloc = std::allocator<LODStruct>](4u)->LODStruct::Verts.std::vector<_Tp, _Alloc>::operator[] [with _Tp = VertStruct, _Alloc = std::allocator<VertStruct>](3u) = Number'|
我错过了什么,或者是我试图做不到的事情?
答案 0 :(得分:6)
Verts[3]
的类型为VertStruct
,Number
为int
,因此无法进行分配(使用已发布的代码)。您可以指定VertStruct
的其中一个成员作为作业的目标:
Chunk[5].LOD[4].Verts[3].X = Number;
如果您希望能够将int
分配给VertStruct
,则提供operator=(int)
(如Luchian所述),但似乎在调用网站上,将int
值分配给哪些成员将是非常模糊的:
struct VertStruct
{
double X, Y, Z;
VertStruct& operator=(int d)
{
X = d; // Or 'Y' or 'Z' or all.
return *this;
}
};
答案 1 :(得分:3)
此
Chunk[5].LOD[4].Verts[3]
是VertStruct
,您无法为其指定整数。
答案 2 :(得分:2)
你错过了一些东西,这并不是不可能的(如果你能想象的话,一切皆有可能。那就是科学家的全部意义):)
Chunk[5]
返回ChunkStruct
。
Chunk[5].LOD
返回std::vector<LODStruct>
。
Chunk[5].LOD[4]
会返回LODStruct
。
Chunk[5].LOD[4].Verts
会返回std::vector<VertStruct>
。
最后,Chunk[5].LOD[4].Verts[3]
会返回VertStruct
。并且您尝试为其分配int
。显然,不能使用你的代码。
要使其工作(这种确切的语法),您应该重载operator = (int x)
。否则,请将int
分配给您想要的任何成员。
答案 3 :(得分:2)
您正在将int
中的一个号码分配到VertStruct
,这是struct
并且有3个字段(X,Y,Z)。如果要设置X坐标,请执行:
Chunk[5].LOD[5].Verts[3].X = Number;