2011-12-15 5 views
2

클래스 생성자의 초기화 목록을 통해 참조 객체를 초기화하려고하는데 다음과 같은 방법으로 초기화 할 수없는 이유에 대한 입력이 필요합니다. 다음과 같은 방법으로 참조를 초기화 할 수 없습니까?C++ 참조 변수 초기화 목록

class ObjectA 
{ 

private: 
    char* _nameA; 
    int _velocityA; 

public: 
     ObjectA(char* name, int velocity) 
     { 
      name = name; 
      _velocityA = velocity; 
     } 
}; 

내가 말한다 다음 초기화 목록에 오류가 유형의 참조 유형의 값으로 초기화 할 수 없습니다 (const를 지 않은) "ObjectA &" "문자 *" 이유는 정확히 내가 오전 이 오류가 발생합니까? 내가 뭘 잘못하고 있니?

class ObjectB 
{ 

private: 
    ObjectA& objA; 

public: 
     ObjectB(char* engName, int _velocityA):objA(engName, _velocityA) 
     { 
     } 
}; 
+1

왜 참조입니까? – kennytm

+0

'ObjectA'가 아니고'ObjectA '가 아니라면'objA (ObjectA (engName, _velocityA))'를 사용해야하지만'objA'는 참조이므로 참조하지 말아야합니다. RValue. – PeterT

+1

이미 ObjectA에 char *가 클래스 외부에있는 일부 개체를 가리키는 멤버를 가지고 있기 때문에 나중에 ObjectA 인스턴스가 자체 포함되지 않으므로 문제가 발생할 수 있습니다. –

답변

2

문제는 당신이 객체를 생성하는 것과 같은 방식으로 참조 objA를 초기화하는 시도이다.

ObjectB(char* engName, int _velocityA):objA(engName, _velocityA) 
    { 
    } 

objA 기억은 참조가 아닌 포인터 나 objA(engName, _velocityA)ObjectA의 생성자를 호출 할 그래서 변수입니다.

ObjectB의 생성자는 참조 할 수 있도록 ObjectA 개체를 매개 변수로 사용해야합니다.

class ObjectB 
{ 

private: 
ObjectA& objA; 

public: 
    ObjectB(ObjectA & a):objA(a) 
    { 
    } 
}; 

int main() 
{ 
    ObjectA a("hello", 10); 
    ObjectB *b = new ObjectB(a) ; 

} 
3

여기에서하려는 것은 의미가 없습니다. 새로 생성 된 객체로 참조을 초기화하려고합니다. 참조는 기존 개체를 가리켜 야합니다. 가질 수 없다면 원하는 참조가 아닐 수도 있습니다.

는 더 많은 정보를 위해이 질문을 참조하십시오 : Initialization of reference member requires a temporary variable C++