如何为新结构分配内存?

时间:2014-04-14 04:10:10

标签: c++ pointers struct linked-list structure

我试图在类的构造函数中为新的链表分配内存,但是当我尝试编译它时,我得到了一些奇怪的消息。

struct Node {
  Song s;
  Node *next = NULL;
};


tsuPod::tsuPod(int songs, int size)
{
  MAX_SONGS = songs;
  MAX_MEM   = size;
  memory = 0;
  Node *list = new Node; // call to implicitly deleted default constructor of Node
}

似乎这应该是一个相对快速的响应,因为我猜测我错过了c++的关键字,并且不一定会产生语法错误。说实话,我甚至不知道结构可能有构造函数,但显然它们可以。无论如何,如果有人能够快速告诉我什么是错的,或者为什么它会说你会很棒!谢谢!

1 个答案:

答案 0 :(得分:0)

由于您没有为Node提供任何构造函数,Node的默认构造函数将由编译器提供。但是当它试图这样做时,它遇到了一个问题:要(默认)构造一个Node,首先需要构造一个Song。由于以下三个原因之一,创建Song是不可能的:

  1. Song的所有构造函数都接受一个或多个参数,并且您没有为它们提供默认值。
  2. 明确删除了默认构造函数:Song() = delete
  3. 有一个默认的构造函数,它是私有的。
  4. 这就是为什么错误消息还指出默认构造函数隐式已删除;你现在可以排除选项#2和#3。