2011-10-07 3 views
3

왜이 기능이 작동하지 않을 수 없는지 ... 컴파일 할 수없고 계속 오류가 발생 함 "에 대한 호출과 일치하는 함수가 없습니다. 'Duty :: Duty()' "는 changeDuty 생성자가있는 행입니다. Duty 클래스 생성자 중 한 명을 호출하려고한다고 생각합니다. 하지만 Duty 클래스 객체를 전달하고 싶습니다.C++에서 다른 클래스의 생성자에 객체를 전달하는 데 문제가 있음

class Duty 
    { 
    string Chore; 
    string Member; 

    public: 
    Duty(string dutyInfo); 
    Duty(string chore, string member) {Chore = chore; Member = member;} 
    }; 

class changeDuty 
    { 
    Duty Original; 

    public: 
    changeDuty(Duty original) {Original = original;} 
    }; 

비슷한 질문을 정독 후, 나는 여전히 주사위를

changeDuty(Duty& original) {Original = original;} 

changeDuty(const Duty& original) {Original = original;} 

을 사용하지 않는 시도했습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+1

일반적으로 클래스의 동사 이름은 지정하면 안됩니다. 클래스 레이아웃을 다시 방문해야 할 수도 있습니다. –

+1

스택 오버플로에 오신 것을 환영합니다. 질문에 대한 최상의 답을 수락하는 것을 잊지 마십시오 (답안 점수 아래의 빈 확인 표시를 클릭하십시오). – 01d55

+0

걱정하지 마십시오. changeDuty는 객체가 변경해야하는 의무의 인스턴스이므로 허용 될 수있는 클래스입니까? – Kiwifruitlime

답변

8
changeDuty(Duty original) {Original = original;} 

이 첫 번째 기본값은 Original이며, 다시 할당됩니다. 그러나 기본 생성자가 없으므로 오류입니다. 당신이 원하는 것은 :

changeDuty(Duty original) : Original(original) {} 

Original입니다.

2

기본 생성자를 추가해야합니다. 빈 하나 할 것입니다 : 당신이이 일을하고 있기 때문에

Duty(); 

:

Duty Original; 

컴파일러는 인수가없는 생성자와 Duty 객체를 생성 할 수 있어야합니다.

+0

기본 생성자가 필요하지 않습니다. 올바른 인수를 생성자에 전달하는 것이 필요합니다. –

관련 문제