2017-10-27 24 views
0

私は複数の継承を学び理解しようとしています。'class'への呼び出しに一致する関数がありません

私は「捨てられた」クラス

の子である「スクワット」クラスを持って、なぜ私は、エラーメッセージ放棄::放棄()

不法占拠への呼び出しに該当する機能を取得しています。 cpp | 9 | error: 'Abandoned :: Abandoned()'の呼び出しで一致する関数がありません。

このトピックに関するこのウェブサイトでは、多くの類似の投稿を見てきました。彼らは、私は正しい引数でAbandonedのオブジェクトを宣言しなければならないと言いますが、私はAbandonedの関数を使用しようとしていないので、今はそれをリンクしたいだけです。

私はそれが私のコンストラクタと何か関係があると思いますが、私は問題の内容を理解することができません。

コードの大きな壁のため申し訳ありませんが、私はここで良い方法

考えることができませんでした私のスクワットの.cpp/hが

#ifndef SQUAT_H 
#define SQUAT_H 
#include<abandoned.h> 
#include<building.h> 

class Squat:public Buildings, public Abandoned 
{ 
private: 
    bool isempty; 

public: 

    Squat(bool); 
    virtual void display(); 
    virtual void isoccupied(bool); 


}; 



#endif // SQUAT_H 

と.cppの

#include<iostream> 
#include<squat.h> 
#include<building.h> 
#include<apartment.h> 
#include<abandoned.h> 


Squat::Squat(bool isitempty):isempty(isitempty){} 

void Squat::isoccupied(bool isitempty) 
{ 
    if(isitempty=1) 
    { 
     isempty=1; 
     cout<<"The abandoned building is empty"<<endl; 
    } 
    else cout<<"The abandoned building is full of dirty squatters"<<endl; 
} 

です私の理解は、私が言った時です。

class Squat:public Buildings, public Abandoned 

これは一緒のクラスを '結合' している以下

は私の捨てられたの.cpp/H

#ifndef ABANDONED_H 
#include<vector> 
#include<building.h> 
#define ABANDONED_H 


class Abandoned:public Buildings 
{ 

private: 
    int length; 
    std::vector<int> status; 
    int sum; 

public: 

    Abandoned(int m_size, int asum); 
    Abandoned(bool); 
    virtual void getstatus(int); 
    virtual void display(); 
    virtual void demolish(int); 
    virtual void rebuild(int); 
    //virtual void demolish(int); 



}; 






#endif // ABANDONED_H 

と私の.cpp

#include<iostream> 
#include<string> 
#include<vector> 
#include<apartment.h> 
#include<building.h> 
#include<abandoned.h> 
#include<algorithm> 
#include<numeric> 
using namespace std; 

Abandoned::Abandoned(int m_size, int asum): length(m_size), status(m_size, 0), sum(asum) 
{} 


void Abandoned::getstatus(int m_size) 
{ 
    status.push_back(length); 

}; 

void Abandoned::display() 
{ 
    Buildings::display(); 
    cout << " length of status is: "<<status.size()<<endl; 
} 

void Abandoned::demolish(int asum) 
{ 
    if(asum<3) 
    { 
     cout<<"The building is below the safety standards and should be demolished"<<endl; 
    }else{ 
     cout<<"The building meets the safety standards and can be rebuilt"<<endl;} 

} 

void Abandoned::rebuild(int asum) 
{ 
    if(asum>3) 
    { 
     cout<<"The building is above the safety standards and should be rebuilt"<<endl; 
    }else{ 
     cout<<"The building should be demolished"<<endl;} 

} 
+1

私はこのコードのほとんどは手元の質問とは無関係であるかなり確信しています。それをMVCEに還元できますか? TIA。 – Borgleader

+1

@Borgleaderによると、コンパイラによって表示される正確なエラーメッセージは役に立ちます。 – Steve

答えて

4

あるクラスAbandonedありません引数なしのコンストラクタを持つそれは、派生クラスのいずれかのコンストラクタがAbandonedから呼び出すためのコンストラクタを選択しなければならないことを意味します

Squat::Squat(bool isitempty): Abandoned(...), isempty(isitempty){} 
+0

ああ私はそこにAbandoned(int m_size、int asum)を置く必要があるので参照してください? これは、引数なしのコンストラクタを放棄しても解決できますか? あなたの助けてくれてありがとう –

+0

@TonyHibbertはいサイズと合計を指定するか、bvoolのコンストラクタを使用する必要があります(インクルードするのを忘れてしまいました)。そして、no-argを追加するとコンパイルエラーも修正されます。 –

+0

ありがとう、私はあなたの提案を入れ、コンストラクタは 'Squat :: Squat(bool isitempty):Abandoned(int m_size、int asum)、isempty(isitempty){}'と読み込み、エラーが発生しました。私は基本的なエラーを私に叫んでいるintの前に、私はそれを見つけることができません。引数なしのコンストラクタはあなたの助けを借りて放棄された(){}ありがとうございます –

関連する問題