функция не принимает 1 аргумент ошибки

Я много раз пытался исправить эту ошибку, но не знаю, что делать. Как для функций 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;
}

person user2105982    schedule 04.04.2013    source источник
comment
Ваши прототипы функций не совпадают с реализациями.   -  person Roger Rowland    schedule 04.04.2013


Ответы (4)


И 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() рассматривает только те объявления, которые идут перед.

person juanchopanza    schedule 04.04.2013
comment
обратите внимание, что он также определяет функции как принимающие аргументы void displayBooks(vector<bookStruct> book){, что, вероятно, неверно. - person Default; 04.04.2013

void displayBooks();
void addBooks();

не принимать никаких параметров, однако вы передали им book, компиляция не может найти обе функции. следовательно, ошибка.

person taocp    schedule 04.04.2013

void displayBooks(); 

должно быть

void displayBooks(vector<bookStruct> book);

но в качестве лучшего подхода вы можете использовать:

void displayBooks(const vector<bookStruct> &book); 

Чтобы вектор книги не копировался при передаче в метод DisplayBooks.

person fatihk    schedule 04.04.2013
comment
Это должна быть ссылка const на vector, поскольку я думаю, что displayBooks не нужно хранить данные. - person Benjamin Bannier; 04.04.2013
comment
Не видел, чтобы у него это было изначально. - person Benjamin Bannier; 04.04.2013

Ваша функция объявлена ​​как

void addBooks();

но вы называете это с

addBooks(book);

Компилятор явно считает странным, что у вас нет аргумента в объявлении, а потом пытается вызвать его с аргументом.

Мне трудно точно посоветовать, что вам следует делать, поскольку из кода, который вы опубликовали, неясно, что является «правильным».

person Mats Petersson    schedule 04.04.2013
comment
советовать не так сложно, так как у него есть определения под main - он, скорее всего, хочет иметь вектор в качестве аргумента. - person Default; 04.04.2013