我有这个结构。我想要做的是有一个持续的ram空间来记忆它们在硬盘上。我有一个动态创建的字符串,我将其用作键。我想创建一个可以执行此操作的结构。我用模板制作了这个。
template <class ItemType> struct INXM_Node {
ItemType key;
int left;
int right;
int next; // Used for queue.
} ;
我在跑步:
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 作为函数的参数。 我需要使用不同的char数组生成多个结构。
答案 0 :(得分:1)
用于实例化模板的类型必须在编译时修复。使用模板进行编译时,编译器会针对与模板一起使用的不同类型发出特定代码。这不能在运行时完成(甚至可能没有可用的编译器),并且在编译时期望为每种可能的类型完成它是不合理的,实际上是不可能的。
我认为你的问题一般都是错误的。如果您需要在运行时改变大小并使用boost::serialize之类的东西(便携且安全地)将数据保存到磁盘,最好使用std::string
作为密钥。
答案 1 :(得分:1)
问题是编译器需要在编译时知道ItemType
的类型。当你使用变量时,它无法知道。编译器尝试专门创建将在程序执行中使用的每个ItemType
。如果您使用的是可变长度char
数组,则编译器不知道要为该特定ItemType
分配多少内存。您可以考虑使用std::string