0

このエラーを修正するために何度も試みましたが、どうすればよいかわかりません。addBooks 関数と displayBooks 関数の両方で、「関数は引数を 1 つ取りません」というエラーが表示されますが、ベクトルは 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;
}
4

4 に答える 4

3

と の両方が引数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);

の後 に 1 パラメータ関数の定義があることに注意main()してください。この関数は、そのmain()にある宣言のみを考慮します。

于 2013-04-04T11:17:46.607 に答える
1
void displayBooks();
void addBooks();

パラメータを取りませんがbook、それらに渡した場合、コンパイルは両方の関数を見つけることができません。したがって、エラー。

于 2013-04-04T11:16:52.283 に答える
1
void displayBooks(); 

する必要があります

void displayBooks(vector<bookStruct> book);

しかし、より良いアプローチとして、次を使用できます。

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

そのため、メソッド DisplayBooks に渡される間、book ベクトルはコピーされません。

于 2013-04-04T11:17:07.473 に答える
0

あなたの関数は次のように宣言されています

void addBooks();

しかし、あなたはそれを呼び出しています

addBooks(book);

コンパイラは明らかに、宣言に引数がないことを奇妙に考え、引数を付けて呼び出そうとします。

あなたが投稿したコードからは「正しい」ことが何であるかが明確ではないため、私があなたが何をすべきかを正確にアドバイスすることは困難です.

于 2013-04-04T11:17:59.847 に答える