2014-05-11 6 views
0

개체에 연결된 목록의 크기를 결정하기 위해 int를 사용하는 생성자를 사용하여 클래스를 만들었습니다. 내가 겪고있는 문제는이 객체가 다른 클래스의 private 멤버로 인스턴스화 될 때이 생성자를 호출 할 수 있어야한다는 것입니다. 그래서 기본적으로 :다른 클래스의 개체 생성자 사용

class A { 
public: 
    A(); 
    A(int size); 
}; 

class B { 
    const int size = // any number > 0 
private: 
    A a(size); 
}; 

이 오류 얻을 : 나는 온라인 검색을 시도했습니다

constant "B::size" is not a type name

을하지만, 나는이 특정 문제에 걸쳐 올 수 없습니다. 나는 그 질문을 올바르게 말하기 위해 고심하고있을 수있다. 그것은 아직 보지 못한 이상한 문제이다. 어떤 도움을 주셔서 감사합니다!

+0

당신은 선언 한 방법을하지만 당신은 그들을 구현하지 않았습니다. 구현은 어디에 있습니까? – merlin2011

+0

잘못된 디자인입니다. 나는 당신이 해결하려고 시도하고있는 실제 문제에 대해 물어볼 것을 제안한다. – StoryTeller

+0

A의 생성자는 B의 생성자에서 호출해야합니다. 상수를 사용하지 않는 한 헤더 파일에서 직접 인스턴스화 할 수 없습니다. – donutmonger

답변

3

멤버 변수 선언에 매개 변수가있는 생성자를 호출 할 수 없습니다.

B에 대한 생성자를 구현하여 거기에서 수행 할 수 있습니다.

B::B() : a(size) {} 
+0

감사합니다. 그게 바로 제가 찾던 것입니다. 내가 왜 그걸 시도하지 않았는지 모르겠다. – user3625087

2

당신은 initializer list 사용하여 B 생성자에서해야 할 :

class B 
{ 
public: 
    B() : a(size) 
    {} 

private: 
    A a; 
    const int size = ...; 
}; 
관련 문제