我似乎无法将值输入到我已经声明的结构中。我不确定这是语法错误还是逻辑错误。
我已经尝试过更改语法,但总是以同样的错误告终。
struct Book{
string title;
Book* next;
};
Book bookName;
Book author;
Book* add_node(Book* in_root){
cout <<"Enter Book name \n";
cin >> bookName.title;
cout << "Enter author name \n";
cin >> author;
author = new Book();
Book -> Book.next = author;
}
这部分代码遇到错误:
cout << "Enter author name \n";
cin >> author;
author = new Book();
Book -> Book.next = author;
最佳答案
首先,代码中有几个逻辑错误。
- 绝对没有必要将两本书命名为
bookName
和author
除非我误解了它们的目的。 Book ->
和Book.next
是无效逻辑,因为您告诉它对数据类型Book
进行操作,而不是Book
类型的对象。
您可能想要的代码应如下所示:
#include <iostream>
#include <string>
using namespace std;
struct Book{
string title;
string author_name; // You potentially wanted this?
Book* next;
};
// This function assumes that `current_node->next` is `nullptr`
// The reasons for this is that making it handle such cases might be too difficult for you yet.
Book* add_node(Book* current_book){
if(current_book == nullptr){
cout << "Cannot link a new book to an non-existant book!\n";
return nullptr;
}
Book* new_book = new Book();
cout <<"Enter the book name\n";
cin >> new_book->title;
cout << "Enter the author name\n";
cin >> new_book->author_name;
new_book->next = nullptr;
current_book->next = new_book;
return new_book;
}
int main(){
Book* book = new Book();
book->next = nullptr;
cout <<"Enter the name of the first book\n";
cin >> book->title;
cout << "Enter the name of the first book's author\n";
cin >> book->author_name;
add_node(add_node(book));
return 0;
}
我没有让函数处理 current_book->next != nullptr
时的情况的原因是因为它需要使用指向指针的指针。
如果您对此感兴趣,请看这里:
Book* add_node_v2(Book* current_book){
if(current_book == nullptr){
cout << "Cannot link a new book to an non-existant book!\n";
return nullptr;
}
Book* new_book = new Book();
cout <<"Enter the book name\n";
cin >> new_book->title;
cout << "Enter the author name\n";
cin >> new_book->author_name;
new_book->next = nullptr;
// Move to the last book in the chain
Book** ptr_to_next = ¤t_book->next;
while(*ptr_to_next != nullptr){
ptr_to_next = &(*ptr_to_next)->next;
}
*ptr_to_next = new_book;
return new_book;
}
请记住,您最终必须删除
链中的所有图书。
关于c++ - 指向动态内存结构中的变量的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58364661/