C++ 对';Book::Book()';

C++ 对';Book::Book()';,c++,compiler-errors,C++,Compiler Errors,我正在为麻省理工开放式课程做一些事情,它要求我写一门“图书馆”课。现在我有这个: #include <iostream> using namespace std; class Book{ string title; bool rented; public: Book(string bookTitle){ title = bookTitle; } void borrowed(){ rented = true;

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

#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;
}
#包括
使用名称空间std;
课堂用书{
字符串标题;
布尔租用;
公众:
书(字串书名){
书名=书名;
}
作废{
出租=真;
}
返回的void(){
出租=假;
}
布尔是借用的{
归还租赁物;
}
字符串getTitle(){
返回标题;
}
};
类库{
字符串名称;
图书目录[100000000];
int numobooks=0;
公众:
库(字符串名称){
Lname=名称;
}
void addBook(字符串bookName){
图书清单[numOfBooks]=图书(书名);
numobooks+=1;
}
void returnInfo(){

cout编译器抱怨您尚未为Book定义默认构造函数,您可以尝试以下方法:

 explicit Book(const string& bookTitle = std::string("")) 
 : title(bookTitle) 
 {
 }
在堆栈上定义100000000我的原因溢出

Book bookList[100000000];
试着用向量代替

std::vector<Book> bookList;
建议:

  • 要将参数传递给类似std::string的函数,请按const传递
  • 引用是更好的方法。如果可能,请使用成员初始化列表

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

    图书列表创建为对象数组而不是字符串数组,然后您将分配字符串(图书名称)图书列表所以我认为问题就在这里。

    不需要仅仅为了拥有一个对象而创建和复制一些东西。请执行
    库l(“Hi”)
    。他似乎对
    100000000
    数字过于谨慎了。他不一定需要那么多书,而且他正在跟踪他实际使用的一个单独的整数的数量。因此,如果他要切换到向量(他绝对应该这样做),那么可能就不需要用那么多的书来初始化向量了。去掉
    numobooks
    变量,在
    addBook
    函数中使用
    push_back
    ,让向量自己记账。哦,我刚刚意识到了其他一些事情。另外,如果他使用这个方法,他不再需要默认的constructor,它实际上只是满足其有缺陷的初始实现的支柱。当我使用向量时,它说:错误:命名空间“std”中的“vector”没有命名类型
    void addBook(const string& bookName){
        bookList.push_back(Book(bookName));
    }
    
     Library(const string& name) : Lname(name) {  }
     void addBook(const string& bookName){ }
    
    Book bookList[100000000];