2012-07-11 4 views
0

구조를 기준으로 클래스 생성자와, 나는 f는 참조이기 때문에 F를 초기화해야하지만, 내가 원하는 것은 처음이다 foo의 생성자를 호출하고 그 인스턴스를 생성 한 다음 f에 할당합니다. 내가 가진 문제는 전화하면C++ 내가</p> <pre><code>class Printer{ struct foo{ int i; }; foo & f; }; </code></pre> <p>와 클래스 프린터가

Printer::Printer():f(foo(0)){ } 

내가 구조체의 임시 인스턴스에 대한 참조를 사용할 수 없다는 오류가 발생했습니다. 이 문제를 둘러싼 어떤 방법이라도?

덕분에

+0

왜 참조를 f''입니까? –

+0

당신은 그것을'const foo & f'로 만들 수 있습니다. 그러나 Oli가 지적했듯이 왜 당신이 필요로하는지 확신 할 수 없습니다. – chris

+0

왜'f'에 생성자를 추가하지 않고'Printer'의 생성자 초기화리스트에서 초기화 할 수 있습니까? –

답변

0

나는 당신이 실제로 foo하지만 foo 자체에 대한 참조를하지 않을 생각합니다.

foo(0)을 호출하면 구조체가 만들어지고 '부동'개체로 반환됩니다. 아무도 그것을 '보유하고 있지 않으므로 생성자가 종료되자 마자 버려 질 것이기 때문에 그것에 대한 참조를 할당 할 수 없습니다.

따라서 참조를 유지하려면 먼저 영구적 인 실제 개체에 저장해야합니다. 이 경우 전체 구조체를 클래스에 유지하는 것이 좋습니다.

+0

Michał, 'const'참조가 객체의 수명을 연장 시킨다는 것을 잊지 마라. 'const foo & my_foo = foo (0)'를 사용하는 것은 유효합니다. 따라서 비 const 참조의 경우에만 올바른 것입니다. –

2

이 상황에서는 참조가 의미가 없습니다. 시도 대신에 다음

class Printer{ 
    struct foo{ 
     int i; 
     foo(int i_) : i(i_) {} // Define a constructor 
    }; 

    foo f; // Not a reference anymore! 

public: 
    Printer::Printer() : f(0) {} // Initialise f 
}; 
0

당신은 구조체 foo를 선언 한 단계에서 F를 정의하여 OLI의 대답은 약간 짧게 만들 수 있습니다

class Printer{ 
    struct foo{ 
     int i; 
     foo(int i_) : i(i_) {} 
    } f; 
public: 
    Printer() : f(0) {} 
}; 
관련 문제