char []中的可变修饰类型

时间:2011-08-26 16:41:11

标签: c++ compiler-errors arrays

我有这个结构。我想要做的是有一个持续的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数组生成多个结构。

2 个答案:

答案 0 :(得分:1)

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

我认为你的问题一般都是错误的。如果您需要在运行时改变大小并使用boost::serialize之类的东西(便携且安全地)将数据保存到磁盘,最好使用std::string作为密钥。

答案 1 :(得分:1)

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