可变修改char[]类型

variably modified type in char[]

本文关键字:类型 char 修改      更新时间:2023-10-16

我有这个结构体。我想做的是在硬盘上有一个持续的内存空间来记忆它们。我有一个动态创建的字符串,我将使用它作为键。我想创建一个结构体来做这个。我用模板制作了这个

template <class ItemType> struct INXM_Node {
    ItemType key;
    int left;
    int right;
    int next; // Used for queue.
} ;

I was running:

INXM_Node<char[100]> *root = new INXM_Node<char[100]>();

一切都很好,直到我试图用一个变量改变100。然后我得到了错误:

'char [(((long unsigned int)(((long int)attrLength) - 1)) + 1u)]' is a variably modified type

我跑的是:

sizeof(INXM_Node<char[attrLength]>);

我将attrLength作为函数的参数。我需要用不同的字符数组生成多个结构体

问题是编译器需要在编译时知道ItemType是什么类型。当您使用变量时,它无法知道。编译器尝试专门创建将在程序执行中使用的每个ItemType。如果您使用可变长度的char数组,编译器不知道为特定的ItemType分配多少内存。您可以考虑使用std::string

用于实例化模板的类型必须在编译时固定。当使用模板进行编译时,编译器会针对模板使用的不同类型发出特定的代码。这不能在运行时完成(甚至可能没有可用的编译器),并且期望在编译时为所有可能的类型完成它是不合理的,实际上是不可能的。

总的来说,我认为你解决问题的方法是错误的。如果您需要在运行时改变大小,最好使用std::string作为键,并使用boost::serialize(可移植且安全)将数据保存到磁盘。