1

私は MIT OCW コースのために何かをしていますが、「ライブラリ」クラスを作成するよう求められます。今私はこれを持っています:

#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()' への呼び出しに対応する関数がありませんというエラーが表示されます。

4

3 に答える 3

2

Book のデフォルトのコンストラクターが定義されていないと Compiler が文句を言うので、次のようにしてみてください。

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

スタックに 100000000 を定義するとオーバーフローが発生し、

Book bookList[100000000];

代わりにベクトルを使用してみてください

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. 参照はより良い方法です。可能であればメンバー初期化リストを使用する
 Library(const string& name) : Lname(name) {  }
 void addBook(const string& bookName){ }
于 2013-06-07T04:46:45.007 に答える
0

bookListは文字列の配列ではなくオブジェクトの配列として作成され、次に文字列(bookName) を bookList に割り当てて いるので問題はここにあると思います。

于 2013-06-07T04:58:36.800 に答える
0
Book bookList[100000000]; 

デフォルトのコンストラクターで 100000000 オブジェクトを作成しようとします。

于 2013-06-07T04:51:31.600 に答える