2012-02-26 2 views

답변

4

ofstream(FileName.c_str(),ios::out))은 비 const 참조에 바인딩 할 수없는 임시 개체를 만듭니다.

왜 대신 이렇게 (뿐만 아니라 의견을 읽고) 해달라고 : 도움이

class test 
{ 
private: 
    ofstream ofs; //remove & ; i.e delare it as an object 
public: 
    test(string const & FileName); //its better you make it const reference 
    void save(const string &s); 
}; 

test::test(string const & FileName) //modify the parameter here as well 
    : ofs(FileName.c_str(),ios::out) //construct the object 
{ 

} 

희망을.

+1

주 임시),'test' 인스턴스는 생성자의 실행이 끝날 때 파괴 된 임시 객체에 대한 참조를 보유합니다. –

+0

이 경우 객체의 ofs를 어떻게 선언합니까? –

+0

@ AndréCaron : 다시 말해, ofs를 const 참조로 선언하는 것은 해결책이 아닙니다. – Nawaz

0

특수한 상황에서만 다른 개체에 대한 참조를 클래스 데이터 멤버로 사용합니다. 일반적으로 클래스의 평생 의존성을 멤버 객체에 원합니다. 일반적으로 수업은 복사 및 과제가 제한됩니다. 참조가 필요한 경우 개체가 만들어져 있어야합니다.

발신자 :

ofstream ouf("someFileName.txt"); 
test testObj(ouf) 

클래스 헤더 : 그것은 * *는 const를 참조로 선언 된 경우, 초기화가 바인딩에 적어도와 관련하여 (법적 될 것이라고

test::test(ofstream& ous) : ofs(ous) { }