2017-10-27 12 views
0

다중 상속을 배우고 이해하려고합니다.'class'호출에 대한 일치 함수가 없습니다.

내가 '포기'클래스

의 자식 인 '스쿼트'클래스가 왜 오류 메시지가 버려진 :: 버려진()

불법 거주자에 대한 호출에 대한 일치하는 기능 얻고있다. cpp | 9 | 오류 : 'Abandoned :: Abandoned()'에 대한 호출과 일치하는 함수가 없습니다.

이 주제와 관련하여이 웹 사이트에서 비슷한 게시물을 많이 보았습니다. 그들은 포기한 객체를 올바른 주장으로 선언해야한다고 말합니다.하지만 포기한 함수를 사용하려고하지는 않습니다. 단지 링크 만하고 싶습니다.

나는 그것이 내 생성자와 관련이 있다고 생각하지만 문제가 무엇인지 해결할 수 없다.

코드의 큰 벽 죄송하지만 더 좋은 방법이 여기에

내 쪼그리고 통화 당/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 

이 함께 클래스 아래

내 포기 통화 당/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 

내 통화 당은

#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

아아 나는 버려진 (int m_size, int asum)을 거기에 넣어야한다. 포기 된 인수가없는 생성자를 넣음으로써이를 해결할 수 있습니까? 당신의 도움을 주셔서 감사합니다 –

+0

@TonyHibbert 예 크기와 합계를 제공하거나 (포함하는 것을 잊어 버린) bvool 생성자를 사용해야하고, no-arg를 추가하면 컴파일 오류도 수정해야합니다. –

+0

고마워, 그래서 당신의 제안에 넣어 및 생성자 'Squat :: Squat (bool isitempty) : Abandoned (int m_size, int asum), isempty (isitempty) {}'읽습니다 및 오류, 전에 기본 오류로 비명을 지르고 int,하지만 나는 그것을 발견 할 수 없습니다. 인자 없음 생성자는 당신의 도움을 위해 버려진() {} 감사합니다. –