我正在为麻省理工学院开放式课程做一些事情,并要求写一个“图书馆”课程。现在我有这个:
#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()'。
答案 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));
}
建议:
- 要将参数传递给函数,如std :: string,请传递const
- 参考是一种更好的方法。尽可能使用成员初始化列表
醇>
Library(const string& name) : Lname(name) { }
void addBook(const string& bookName){ }
答案 1 :(得分:0)
Book bookList[100000000];
将尝试使用默认构造函数创建100000000对象..
答案 2 :(得分:0)
bookList 是作为一个对象数组而不是字符串数组创建的,然后您将字符串(bookName)分配给 bookList 所以我认为问题出在这里。