带模板的结构的动态分配

时间:2019-05-27 12:46:13

标签: c++ c++11 templates

我有一个代码,它是双向链表的实现。

template<class T>
struct Node{
    T value;
    struct Node * next_;
    struct Node * prev_;
};

template <class T>
class Dex
{
  public:
    struct Node<T> * head = (struct Node<T> *)calloc(1, sizeof(struct Node<T>));
    struct Node<T> * tail = (struct Node<T> *)calloc(1, sizeof(struct Node<T>));
    struct Node<T> * current = (struct Node<T> *)calloc(1, sizeof(struct Node<T>));

编译时,出现以下错误:

  

[错误]'calloc'没有依赖模板参数的参数,因此'calloc'声明必须可用[-fpermissive]

我已经尝试了malloc,new等。但是我想坚持使用calloc()。只要可以使用任何其他分配内存的方法,而且不会抛出任何SIGSEV,我们将不胜感激。

我希望代码能够成功编译,并且能够初始化(struct Node *)指针而不必处理内存问题。

1 个答案:

答案 0 :(得分:1)

似乎您只是缺少所需的条件:

#include <cstdlib>

但是,您可以为此使用new。几乎没有理由在C ++中使用calloc()。要在使用new进行分配时进行默认初始化,请使用:

Node<T> * head = new Node<T>();
Node<T> * tail = new Node<T>();
Node<T> * current = new Node<T>();

最后的()将默认初始化struct成员。对于内置类型,它会像calloc()那样将它们归零。

题外话:
您无需在C ++中的结构名称之前键入struct。您可以将代码更改为:

template<class T>
struct Node {
    T value;
    Node * next_;
    Node * prev_;
};

template <class T>
class Dex {
public:
    Node<T> * head = new Node<T>();
    Node<T> * tail = new Node<T>();
    Node<T> * current = new Node<T>();