2016-04-17 27 views
-2

継承に問題があります。私は、メインC++エラー:抽象クラス型のオブジェクトは許可されていません

int main(){ 
    Repository repo("dogs.txt"); 
    FileAdoptionList* a = new CSVDoglist{};/here is the error 
    Controller ctrl(repo, dogValidator{}, a); 
    UI ui(ctrl); 

    ui.startUI(); 

    delete a; 
} 

...スクリプトで何が間違っているCSVDoglist.h

class CSVDoglist : public FileAdoptionList 
{ 
public: 

    void writeToFile(); 
    void displayAdoptionlist() const; 
}; 

FileAdoptionList.h

class FileAdoptionList : public AdoptionList 
{ 
protected: 
    std::string filename; 

public: 
    FileAdoptionList(); 
    virtual ~FileAdoptionList() {} 

    void setFilename(const std::string& filename); 
    virtual void writeToFile() = 0; 
    virtual void displayAdoptionList() const = 0; 
}; 
を知りません

AdoptionList.h

class AdoptionList 
{ 
protected: 
    std::vector<Dog> storage; 

public: 
    AdoptionList(); 

    // Adds a dog to the playlist. 
    void add(const Dog& dog); 
    // Checks if the adoptionlist is empty. 
    bool isEmpty(); 

    virtual ~AdoptionList() {} 
}; 

エラー:

object of abstract class type "CSVDoglist" is not allowed: 

'CSVDoglist': cannot instantiate abstract class Adoptig Dogs  

私はこの問題の詳細についてのトピックを読んでいるが、私は解決策が見つかりませんでした。

誰かが私を助けることができますか?ありがとう

+1

'CSVDoglist {}'の略語は何ですか?多分あなたは 'CSVDoglist()'を意味するのでしょうか? – ForceBru

+0

これはC++以降の有効な初期化です –

答えて

3

あなたはタイプミスがあります。 displayAdoptionlistという名前

関数は(小さなlが含まれています)CSVDoglistで宣言されているが、純粋仮想関数displayAdoptionList(大Lが含まれていますが)CSVDoglistでオーバーライドされていません。

+1

これは 'override'キーワードを使用する理由です。 @Gill Meh; –

+1

;同じ理由でコードはまだ失敗し、OPはなぜか不思議に思うでしょう。 –

+0

くそー、どうもありがとう。 – Kaiac

関連する問題