没有用于调用'Book :: Book()'的匹配函数

时间:2013-06-07 04:43:22

标签: c++ compiler-errors

我正在为麻省理工学院开放式课程做一些事情,并要求写一个“图书馆”课程。现在我有这个:

#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()'。

3 个答案:

答案 0 :(得分:2)

编译器抱怨你没有为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. 要将参数传递给函数,如std :: string,请传递const
  2.   
  3. 参考是一种更好的方法。尽可能使用成员初始化列表
  4.   
 Library(const string& name) : Lname(name) {  }
 void addBook(const string& bookName){ }

答案 1 :(得分:0)

Book bookList[100000000]; 

将尝试使用默认构造函数创建100000000对象..

答案 2 :(得分:0)

bookList 是作为一个对象数组而不是字符串数组创建的,然后您将字符串(bookName)分配给 bookList 所以我认为问题出在这里。