1

クラスの本と 2 つのサブクラスの lerningbook,readingbook があり、本のリスト book* listofbooks を作成し、それにサブクラスを追加しようとしています。

Book* listOfBooks;

void Mang::addBookToList(Book b3)
{
    Book* temp;
    temp=listOfBooks;
    lobsize++;
    listOfBooks=new Book[lobsize];
    int i;
    for(;i<lobsize;i++)
    {
        listOfBooks[i]=temp[i];
    }
    listOfBooks[i]=b3;
}

問題は、サブクラスを送信しようとしているときに、これが受け入れられないことです。テンプレートを使用しようとしたため、関数は任意のクラスを取得できますが
、エラーが発生するのを助けませんでした:
lerningbook から book への適切なユーザー定義の変換が存在しませんこれを可能にする同じタイプの関数を実装する必要があると推測していますが、あなたの1人が私
を助けてくれることを願っています:)
この問題に行き詰まった)

4

1 に答える 1

1

b3はですがBooklistoOfBooksはの配列ですBook*。割り当てのためだけでなく、オブジェクトのスライスBook*を避けるために、にを渡す必要があります。addBookToList

これが学習演習ではない場合は、std::vector<Book*>代わりにまたはを使用してstd::vector<std::shared_ptr<Book>>ください。はstd::vector必要に応じて動的に拡張され、スマートポインターを使用すると、が破棄されdeleteたときに要素が自動的に拡張されます。vector

使用を選択した場合はBook*三つのルールとは何ですか?Mangこれは、コピーコンストラクタと代入演算子を宣言することでコピー不可にすることができprivateます。

iはループ内で初期化されておらず、次の割り当ては、 :の後のforように配列へのアクセスの範囲外であることに注意してください。i == lobsizefor

listOfBooks[i]=b3;

配列インデックスは0から実行されるためlobsize - 1、最後の要素のインデックスも0から実行されます。

于 2012-06-26T21:55:49.480 に答える