c++ - 没有匹配函数调用 'Book::Book()'

标签 c++ compiler-errors

我正在为 MIT OCW 类(class)做一些事情,它要求编写一个“图书馆”类(class)。现在我有这个:

#include <iostream>

using namespace std;

class Book{
    string title;
    bool rented;
public:
    Book(string bookTitle){
        title = bookTitle;
    }
    void borrowed(){
        rented = true;
    }
    void returned(){
        rented = false;
    }
    bool isBorrowed(){
        return rented;
    }
    string getTitle(){
        return title;
    }
};

class Library{
    string Lname;
    Book bookList[100000000];
    int numOfBooks = 0;
public:
    Library(string name){
        Lname = name;
    }
    void addBook(string bookName){
        bookList[numOfBooks] = Book(bookName);
        numOfBooks += 1;
    }
    void returnInfo(){
    cout << "Library hours:" << "\n" << "Libraries are open daily from 9am to 5pm." << "\n" << "Library addresses:" << "\n" << "10 Main St." << "\n" << "228 Liberty St.";
    }

};
int main()
{
    Library l = Library("Hi");
    return 0;
}

当我编译时,它给出了第 35 行没有匹配函数调用 'Book::Book()' 的错误。

最佳答案

编译器提示你没有为 Book 定义默认构造函数,你可以试试这个:

 explicit Book(const string& bookTitle = std::string("")) 
 : title(bookTitle) 
 {
 }

在堆栈上定义 100000000 导致溢出,

Book bookList[100000000];

尝试改用 vector

std::vector<Book> bookList;

在 addBook 中,您可以简单地使用 std::vector::push_back添加一本新书。要获得总书数,请使用 std::vector::size()

void addBook(const string& bookName){
    bookList.push_back(Book(bookName));
}

建议:

  1. To pass parameter to function like std::string, pass by const
  2. reference is a better way. use member initialization list if possible
 Library(const string& name) : Lname(name) {  }
 void addBook(const string& bookName){ }

关于c++ - 没有匹配函数调用 'Book::Book()',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16976367/

相关文章:

c++ - 从 C++ 的图像流中创建 Qml 视频

c++ - 如何提高 Visual C++ 编译时间?

c++ - 错误 LNK2019 和 LNK 1120

c++ - 使用三元表达式返回引用会导致运行时错误

c++ - 为什么 C++ 构建器中的 DBL_MAX 不一致?

c++ - 如何使用指向常量对象的指针调用成员函数指针?

java - 极其简单的测试器类的类、接口(interface)或枚举预期错误

Java 可执行 Jar 文件

Objective-C——同一个库的不同版本导致名称冲突

python - 列表索引必须是整数而不是 str python sqlite3