C++ 如何为新结构分配内存?
我试图在一个类的构造函数中为一个新的链表分配内存,但是当我试图编译它时,我得到一些奇怪的消息C++ 如何为新结构分配内存?,c++,pointers,struct,linked-list,structure,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 defau
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++
的一些关键内容,不一定会出现语法错误。老实说,我甚至不知道structs可以有构造函数,但显然它们可以。不管怎样,如果有人能很快告诉我出了什么问题或者为什么它会说你会很棒!谢谢大家! 由于您没有为节点
提供任何构造函数,节点
的默认构造函数将由编译器提供。但当它尝试这样做时,遇到了一个问题:要(默认)构造节点
,首先需要构造一首歌曲
。由于以下三个原因之一,无法创建一首歌曲
:
Song
的所有构造函数都接受一个或多个参数,您没有为它们提供默认值Song()=delete
李>
这就是为什么错误消息还指出默认构造函数是隐式删除的;您现在可以排除选项2和3。检查
歌曲
。如果没有默认构造函数,则节点也没有默认构造函数。疯狂必须在某个地方结束。默认构造函数意味着不接受任何参数?只是要确保这就是默认构造函数。我们前几天才知道他们是什么意思。如果您为歌曲
提供了一个非默认构造函数(您很可能提供了),那么它的默认值将隐式消失,除非您也提供了一个构造函数。您应该为节点
提供一个指针,以便正确初始化下一个
指针(您现在使用的语法似乎错误,但我太累了,所以可能是睡眠问题)。您的代码没有问题(请参阅运行等效代码)-可能您的编译器太旧,无法正确支持=NULL
符号,或者您在节点中有一些其他成员函数,您没有向我们展示…?@TonyD您发布的等效代码可能不等效。如果OP的类Song
没有默认构造函数,那么等价的代码将报告与OP看到的错误几乎相同的错误。我同意OP没有向我们展示一些东西,但我认为这是Song::Song
,这将是错误背后的全部原因。