假设我有一个用于创建树或列表结构的类。我们称之为
template <typename K, typename V>
class Node{
// some data
Node<K,V>* next;
Node() {
next = static_cast<Node<K,V>*>( malloc( sizeof(Node<K,V>) ));
}
};
通过执行此操作,我收到以下编译器错误:
没有任何关于&#39; malloc&#39;这取决于模板 参数,所以&#39; malloc&#39;必须是可用的(如果你使用 &#39; -fpermissive&#39;,G ++将接受您的代码,但允许使用 未声明的名称已弃用)
有没有办法以这种方式使用malloc而不必使用弃用的代码?我想使用malloc而不是new,因为我想在那里做更高级的内存管理。
答案 0 :(得分:8)
您似乎缺少#include <cstdlib>
或#include <stdlib.h>
。编译器抱怨缺少声明。那些包含文件提供了一个。
答案 1 :(得分:3)
编译器错误告诉您它没有malloc
的声明。您缺少声明该函数的include。
除此之外,这种方法被打破了。您正在编写通用树,但由于使用malloc
,您将限制使用POD类型(我假设K
和V
存储在Node
中})。您应该使用new
代替调用该类型的构造函数,而不仅仅是分配内存。