2013-03-14 5 views
0

멤버 변수에 대한 생성자 : 실제로 나는 매개 변수 MeasurementMultiplier(a,b,c)로 초기화하기 때문에,않도록 기본 I가 다른 클래스의 멤버 변수가있는 클래스가

class MeasurementUnit { 
private: 
    MeasurementMultiplier _multiplier; 

는 사실 내가 MeasurementMultiplier에 대한 기본 생성자를 필요가 없을 것, 그리고 것 -하지만 직접 수행 할 수 없습니다

C2864: 'MeasurementUnit::_multiplier' : 
only static const integral data members can be initialized within a class 

그래서 나는 그것이 컴파일되지 않습니다하지 않고, 기본 생성자가 필요 error: C2512: 'MeasurementUnit' : no appropriate default constructor available

기본 생성자가 필요 없게 할 수 있습니까?

+0

는 초기화 목록을 사용하거나 C++ 11 수준의 멤버 초기화를 지원하는 컴파일러를 얻을. – chris

+0

http://www.learncpp.com/cpp-tutorial/101-constructor-initialization-lists/ –

+4

이 단어를 다시 입력해야 할 수도 있습니다. 나는 그것을 이해하지 못했다. –

답변

6

클래스의 모든 생성자에서 MeasurementUnit, 이니셜 라이저 목록에서 구성원 변수 _multiplier을 초기화해야합니다. 예 :

MeasurementUnit::MeasurementUnit() 
    : _multiplier(1,2,3) 
{} 
+0

죄송합니다. 이해가 가지 않습니다. 그렇게함으로써 당신은 기본 생성자를 갖게되고, 이것은 피하고 싶습니다. –

+1

@HorstWalter :이 경우 귀하의 질문을받지 못합니다. * 예제는'MeasurementUnit'의 (기본) 생성자를 참조하여 'MeasurementMultiplier'의 기본 생성자가 필요하지 않도록합니다. 이것이 원하는 것이 아니라면 질문을 수정하고 명확히하십시오. –

+0

죄송합니다, 저의 실수, 사과드립니다. 당신 말이 맞아요. –