gpt4 book ai didi

c++ - 带模板的结构的动态分配

转载 作者:行者123 更新时间:2023-11-30 04:47:16 24 4
gpt4 key购买 nike

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

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

当我编译它时,我收到以下错误:

[Error] there are no arguments to 'calloc' that depend on a template parameter, so a declaration of 'calloc' must be available [-fpermissive]

我已经尝试过 malloc、new 等。但我想坚持使用 calloc()。任何其他分配内存的方法都值得赞赏,只要它有效并且不会抛出任何 SIGSEV。

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

最佳答案

看来您只是缺少所需的内容:

#include <cstdlib>

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

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

末尾的 () 将默认初始化结构成员。对于内置类型,它会将它们归零,就像 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>();

关于c++ - 带模板的结构的动态分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56326408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com