2017-03-02 11 views
-1

내 상황의 문구가 확실하지 않아 답을 찾기가 어려울 수 있습니다. 기본적으로 다른 클래스 B (has-a 관계) 인 private 멤버가있는 클래스 A가있는 경우 클래스 A의 생성자를 만드는 방법은 무엇입니까?함수에서 클래스를 유형으로 전달하는 방법

클래스 생성자는 :

classA::classA(int a, int b, classB c); 

이 나에게 "오류 제공 :로 호출 일치 기능 'ClassB가 :: ClassB가을()하고 자신의 주장과 얼마나 많은 내가 제공을 기반으로 후보를 나열, 또한 물론 'c 앞에서 예상되는 기본 기능'. 아마도 꽤 큰 코드가 누락되어 코드가 매우 일반적이어서 올바른 방향으로 나를 가리킬 때 일반적인 대답 만 필요합니다. 나머지 코드는 B와 A가 가능한 한 최소화 될 것이라고 가정 할 수 있습니다. 감사합니다!

+0

생성자 코드를 추가 할 수 있다면 도움이됩니다. 어쨌든 A의 생성자가 매개 변수를 사용하지 않는 생성자를 사용하여 B 멤버를 초기화하려고 시도하는 것처럼 보이며 후자에는 생성자가 없습니다. – mcrlc

+0

컨텍스트가 충분하지 않습니다. classA의 단일 콜론 : classA는 의심 스럽습니다. 이것은 goto의 레이블입니까? –

+0

관련 코드를 표시하기 위해 질문이 개선 될 것입니다. [게시 가이드 라인은 여기를 참조하십시오.] –

답변

0

다음 선언이 작동합니다.

class classB 
{ 
public : 
    int b; 
    classB() 
    { 
     b = 1; 
    } 
}; 

class classA 
{ 
public: 
    classA(int a, int b, classB c) 
    { 
     ;// 
    } 
}; 

int main() 
{ 
    classB b; 
    classA a(1, 2, b); 

    return 0; 
} 

을 지금, 나는 당신이 할 수도 것은 classB 경우 classB 당신의 선언은, 마침내 classA

class classA{ 
    ... 
} 

class classB{ 
    ... 
} 

후에 수행하고, 추측 classA 안에 선언되어 생성자에 전달하려면 정적이어야합니다. 이렇게.

class classA 
{ 
public: 
    static class classB 
    { 
    public: 
     int b; 
     classB() 
     { 
      b = 1; 
     } 
    }; 


    classA(int a, int b, classB c) 
    { 
     ;// 
    } 
}; 

int main() 
{ 
    classA::classB b; 
    classA a(1, 2, b); 

    return 0; 
} 
+0

나는'class B'가 멤버 변수'A a; '를 포함한다고 제안하고 있다고 생각합니다. –

+0

예, 감사합니다. 편집 됨. – Ultraviolet

1

아시다시피, 클래스 A 내에 개인 멤버 B가 있습니다. 귀하는 생성자의 초기화 목록에서 초기화하지 않습니다. 결과적으로 B의 기본 생성자가 호출되며 오류 제안은 사용할 수 없습니다.

class A { 
    B b; 
public: 
    A(/* parameters */) 
    : b(/* parameters to construct b */) // missing part 
    { } 
};