可变修改char[]类型
variably modified type in char[]
我有这个结构体。我想做的是在硬盘上有一个持续的内存空间来记忆它们。我有一个动态创建的字符串,我将使用它作为键。我想创建一个结构体来做这个。我用模板制作了这个
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(可移植且安全)将数据保存到磁盘。
相关文章:
- 枚举类的 C 样式强制转换到基础类型 char 的引用
- 无法使用类型 'const char *' 的左值初始化类型 'char *' 的成员子对象
- C++:将模板类型 char 转换为 std::string
- 获取"rw_ssid"中成员"长度"的错误请求,该成员属于非类类型"char*"
- 将"std::string {aka std::basic_string}"赋值中的不兼容类型<char>
- 成员引用基类型 'char' 不是 C++ 中的结构或联合
- 错误:请求成员 .. 是非类类型"char"
- 错误:为"运算符 std::string {aka std::__cxx11::basic_string}"指定的返回类型<char>
- 为什么类型 char 返回不同的值?
- 请求成员 'begin' in 'c' 中,它是非类类型 'char [101]' sort(c.begin(), c
- C++ 类型 "char" 的参数与类型 "const char" 的参数不兼容
- 类型 "const char *" 的参数与类型 "char *" 的参数不兼容
- 类型 "const char*" 的参数与类型 "char*" 的参数不兼容。但是为什么?:(
- 创建进程使用路径时出现错误事件:类型 "char *" 的 E0167 参数与类型 "LPWSTR" 的参数不兼容
- 类型 "const char *" 的默认参数与类型 "char *" 的参数不兼容
- 返回类型 char* 的成员函数返回在 while 循环后包含不同字符串的地址
- 接受类型char的输入的问题
- 错误:无法递增类型 'char [6]' 的值
- "char *" 类型的值不能用于初始化类型 "char" 的实体
- 类型 "char *" 的参数与类型 "LPWSTR" 的参数不兼容