函数不带1个参数错误

时间:2013-04-04 11:15:27

标签: c++ vector arguments enumerate

我已多次尝试修复此错误,但我不知道该怎么做。对于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;
}

4 个答案:

答案 0 :(得分:3)

addBooksdisplayBooks都不带参数:

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()函数仅考虑之前之前的声明。

答案 1 :(得分:1)

void displayBooks();
void addBooks();

不带参数,但是你将book传递给它们,编译找不到这两个函数。因此,错误。

答案 2 :(得分:1)

void displayBooks(); 

应该是

void displayBooks(vector<bookStruct> book);

但作为一种更好的方法,您可以使用:

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

因此,在传递给方法DisplayBooks

时,不会复制书籍向量

答案 3 :(得分:0)

您的功能被声明为

void addBooks();

但是你用

来调用它
addBooks(book);

编译器显然认为你在声明中没有参数,然后尝试用参数调用它很奇怪。

我很难确切地建议你应该做些什么,因为你所发布的代码并不清楚“正确”是什么。