C++ 指向动态内存中结构中的变量时出现问题

C++ 指向动态内存中结构中的变量时出现问题,c++,dynamic,struct,heap,dynamic-memory-allocation,C++,Dynamic,Struct,Heap,Dynamic Memory Allocation,我似乎无法将值输入到我已经声明的结构中。我不确定这是语法错误还是逻辑错误 我已经尝试过更改语法,但总是以相同的错误结束 struct Book{ 字符串标题; 书*下一页; }; 书名; 图书作者; 书本*添加\节点(书本*在\根目录中){ cout bookName.title; 作者; 作者=新书(); Book->Book.next=作者; } 这部分代码中遇到错误: cout>作者; 作者=新书(); Book->Book.next=作者; 首先,代码中有几个逻辑错误 除非我误解了它

我似乎无法将值输入到我已经声明的结构中。我不确定这是语法错误还是逻辑错误

我已经尝试过更改语法,但总是以相同的错误结束

struct Book{
字符串标题;
书*下一页;
};
书名;
图书作者;
书本*添加\节点(书本*在\根目录中){
cout bookName.title;
作者;
作者=新书();
Book->Book.next=作者;
}
这部分代码中遇到错误:

cout>作者;
作者=新书();
Book->Book.next=作者;

首先,代码中有几个逻辑错误

  • 除非我误解了它们的目的,否则绝对不需要有两本书,分别命名为
    bookName
    author
  • Book->
    Book。next
    是无效的逻辑,因为您告诉它操作数据类型
    Book
    ,而不是
    Book
    类型的对象
您可能需要的代码应该如下所示:

#包括
#包括
使用名称空间std;
结构书{
字符串标题;
string author_name;//您可能想要这个?
书*下一页;
};
//此函数假定'current_node->next'是'nullptr'`
//这样做的原因是,让it部门处理此类案件对您来说可能太难了。
书本*添加\节点(书本*当前\书本){
如果(当前_book==nullptr){
标题;
cout>新书->作者姓名;
新建图书->下一步=nullptr;
当前_book->next=新_book;
归还新书;
}
int main(){
Book*Book=新书();
book->next=nullptr;
书籍->标题;
cout>book->author\u name;
添加_节点(添加_节点(书本));
返回0;
}
current\u book->next!=nullptr
时,我没有让函数处理cases的原因是它需要使用指向指针的指针。 如果您对它感兴趣,这里是:

Book*add\u node\u v2(Book*current\u Book){
如果(当前_book==nullptr){
标题;
cout>新书->作者姓名;
新建图书->下一步=nullptr;
//移动到链中的最后一本书
书本**ptr\u to\u next=¤t\u Book->next;
while(*ptr_to_next!=nullptr){
ptr_to_next=&(*ptr_to_next)->next;
}
*ptr_to_next=新书;
归还新书;
}

请记住,您最终将不得不
删除链中的所有书籍。

这应该是与
next=newbook()类似的内容当添加新节点时,;cin>>next->title;
。@Habitate是的,谢谢你修复了很多语法错误,但是它说变量
next
没有声明,我不确定应该确切地给出什么类型。只需考虑几点……1)为什么
作者
不在书本结构中,2)
添加节点de>似乎没有返回任何内容,3)我建议使用智能指针,而不是
new
,因为您需要声明
析构函数
delete
使用
new
@ignacio创建的对象。我希望将所有内容都存储在动态内存中,这就是为什么我将下一步声明为指针的原因除此之外,我还有另一个函数
voiddelete\u list(Book*in\u root)
,用于删除所有分配的内存。