2

假设我有一个类将用于创建树或列表结构。让我们称之为

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>) ));
  }
};

通过这样做,我得到以下编译器错误:

'malloc' 没有依赖于模板参数的参数,因此'malloc' 的声明必须可用(如果你使用'-fpermissive',G++ 将接受你的代码,但不推荐使用未声明的名称)

有没有办法以这种方式使用 malloc 而不必使用已弃用的代码?我想使用 malloc 而不是 new 因为我想做一些更高级的内存管理。

4

2 回答 2

9

看起来你不见了#include <cstdlib>#include <stdlib.h>。编译器抱怨缺少声明。这些包含文件提供了一个。

于 2012-05-08T12:39:04.920 回答
3

编译器错误告诉您它没有声明是什么malloc。您缺少声明该函数的包含。

除此之外,方法被打破了。您正在编写一个通用树,但由于malloc您的使用限制了对 POD 类型的使用(我假设KV存储在Node. 您应该改用new它将调用该类型的构造函数,而不仅仅是分配内存。

于 2012-05-08T12:37:46.883 回答