2013-05-13 1 views
0

나는 X 클래스를 가지고 내 목표는 X&을 반환하는 함수를 구현하기 위해 "나쁜 개체"를 나타내는 특별한 var를 가지는 것입니다. 예를 들어
는 :Init. 정적 멤버 COPY CTOR 동안 개인

//X.h 
class X{ 
private: 
    int i; 
    X(const X& other){} //private COPY CTOR 

public: 
    const static X& badObject; 

    X(int a) : i(a) {} // the only CTOR 

    const X& f(){ 
    if(true) 
    //return some valid X object 
    else 
     return badObject; 
}; 

유일한 ctor에 기본 ctor에 아니며, 복사 ctor에 개인이다 (I이 개체의 대처 허용하지 않습니다.) Operator=는 비공개입니다.
이제 init을 시도 할 때. 복사 ctor에 개인이기 때문에

//X.cpp 
#include "X.h" 
const X& X::badObject = X(1); 

: X.cpp에 badObject는 오류가 발생합니다.

내가 뭘 잘못하고 있니? 이 문제를 해결하려면 어떻게해야합니까?
감사합니다.

+0

왜 'badObject'가 (무엇에 대한) 참조입니까? – Lol4t0

+3

"const static X badObject;"시도하십시오. 선언 및 "const X X :: badObject (1);" 정의에서. –

+0

그렇지 않다면, 'return badObject'를 수행 할 때마다 임시 객체를 생성하기 위해 CTOR가 호출되어 f()의 값에 의해 반환 될 것이고 그렇게하고 싶지 않기 때문입니다. – bomba6

답변

3
badObject의 정확히 하나 개의 인스턴스를 생성합니다

const X X::badObject(1);

이에

const static X badObject;

과 정의에 선언을 변경

. 함수가 ref로 값을 반환하기 때문에 복사 생성자 나 그 이상의 것이 필요하지 않습니다.