c++ - C++ 中的 vector 和结构

标签 c++ arrays vector struct

我正在尝试创建一个包含多种数据类型和 vector 的数据树。到目前为止,我所拥有的如下所示:

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'|

那么我是不是遗漏了什么,或者我试图做的事情是不可能的?

最佳答案

Verts[3]VertStruct 类型,Numberint 类型,因此无法进行赋值(带有发布的代码)。您可以指定 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;
    }
};

关于c++ - C++ 中的 vector 和结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12095305/

相关文章:

java - Windows C++ 相当于 Java 的 LockSupport.parkNanos()

c++ - 错误消息 : start in crt1. 10.6.o ld:未找到符号 collect2:ld 返回 1 退出状态

c++ - 如何将指针地址转换为无符号字符数组?

java - 在 JAVA 中替代 PHP 的关联数组

c++ - 我应该担心 std::vector 的内存碎片吗?

c++ - 使用大小初始化类成员 vector 失败

c++ - Valgrind 在空析构函数上给出 "Invalid write of size 8"

arrays - ISO/IEC 9899 :2011 6. 7.6.3 语义 7 是什么意思?

c++ - 如何将字符串 vector 传递给 foo(char const *const *const)?

c++ - 如何从文件中读取字节? C++