我有一个代码,它是双向链表的实现。
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 *)指针而不必处理内存问题。
答案 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>();