Я много раз пытался исправить эту ошибку, но я не уверен, что делать. И для функций addBooks, и для displayBooks я получаю ошибку «функция не принимает 1 аргумент», хотя вектор должен быть только одним аргументом.
struct bookStruct
{
char title[40];
char author[40];
int pages;
int year;
};
enum menu { display=1, add, end} ;
void displayOptions();
void displayBooks();
void addBooks();
int main(){
vector<bookStruct> book(1);
string option = "display";
displayOptions();
cin >> option;
//std::strcpy(book[0].title, "a");
//std::strcpy(book[0].author, "a");
//book[0].pages = 0;
//book[0].year = 0;
while (option != "end"){
addBooks(book);
displayBooks(book);
}
return 0;
}
void displayOptions(){
cout << "1. Display list of books" << endl;
cout << "2. Add books" << endl;
cout << "3. Exit" << endl;
}
void displayBooks(vector<bookStruct> book){
for (int n = 0; n<book.size(); n++){
cout << book[n].title << " ; " << book[n].author << " ; "<< book[n].pages << " ; " << book[n].year <<endl;
}
cout << endl;
}
void addBooks(vector<bookStruct> book){
int n = book.size()+1;
book.resize(book.size()+1);
cout << "Enter the book title: " << endl;
cin >> book[n].title;
cout << "Enter the author name: " << endl;
cin >> book[n].author;
cout << "Enter the number of pages: " << endl;
cin >> book[n].pages;
cout << "Enter the publication year: " << endl;
cin >> book[n].year;
}
И то и другое addBooks
а также displayBooks
не принимать аргументов
void displayBooks();
void addBooks();
все же вы звоните им с аргументами:
addBooks(book);
displayBooks(book);
Компилятор говорит вам это своими словами.
Похоже, вам нужно
void displayBooks(vector<bookStruct> book);
void addBooks(vector<bookStruct> book);
хотя более вероятно, что вам не нужно копировать векторы в функции:
void displayBooks(const vector<bookStruct>& book);
void addBooks(const vector<bookStruct>& book);
Заметка у вас есть определения однопараметрических функций после main()
, main()
Функция учитывает только объявления, которые приходят до Это.
void displayBooks();
void addBooks();
не принимать параметры, однако вы прошли book
в них компиляция не может найти обе функции. следовательно, ошибка.
void displayBooks();
должно быть
void displayBooks(vector<bookStruct> book);
но в качестве лучшего подхода вы можете использовать:
void displayBooks(const vector<bookStruct> &book);
Так что вектор книги не копируется при передаче в метод DisplayBooks
Ваша функция объявлена как
void addBooks();
но ты звонишь с
addBooks(book);
Компилятор явно считает странным, что у вас нет аргумента в объявлении, а затем попробуйте вызвать его с аргументом.
Мне трудно советовать, что именно вам следует делать, поскольку из кода, который вы опубликовали, неясно, что такое «правильная» вещь.