2009-05-11 5 views
4

다음은 수행하려는 작업입니다.
1) 내 본문에서 ofstream 객체를 엽니 다. 나는 이것을 아무 문제없이 할 수있다.
2)이 개체를 파일 이름과 연결하십시오. 문제 없어.
3)이 객체를 클래스에 전달하고이 클래스 내에서 출력을 보냅니다. 나는 이것을 할 수 없다.
여기 내 코드입니다. 나는 어떤 도움을 주셔서 감사합니다. 감사!주 프로그램에서 클래스로 ofstream 객체 전달

#include <fstream> 
#include <iostream> 
using namespace std; 

typedef class Object 
{ 
public: 
Object(ofstream filein); 
} Object; 

Object::Object(ofstream filein) 
{ 
filein << "Success"; 
} 

int main (int argc, char * const argv[]) 
{ 
ofstream outfile; 
outfile.open("../../out.txt"); 

Object o(outfile); 

outfile.close(); 
return 0; 
} 
+0

어떤 오류가 발생합니까? 정확하지 않은 것은 정확히 무엇입니까? – Andy

+0

왜 ofstream은 복사가 불가능합니까? 그것은 어떻게 성취됩니까? 어쩌면 복사 생성자가 비공개인가? –

답변

9

당신은 참조로 스트림 객체를 통과해야합니다 : 당신은 왜 클래스에 형식 정의를 사용하는

Object::Object(ofstream & filein) 
{ 
filein << "Success"; 
} 

그리고? 그것은 다음과 같아야합니다

class Object 
{ 
    public: 
    Object(ofstream & filein); 
}; 
+0

고마워요! 그런 간단한 질문을해서 죄송합니다. – banDedo

2

그것은 C++에서 다른 옵션이있을 것이다 0X 것으로, 언급 할 가치가있다 (참조로 전달 외에 또는 포인터) :

  1. 표준 : 이동. 스트림을 복사 할 수는 없지만 다른 위치로 이동할 수 있습니다 (스트림이 이동 연산자를 구현할 경우에 따라 다르지만 아마도 그렇게 될 것입니다).
  2. unique_ptr. 스트림은 복사 할 수 없습니다. 포인터를 사용하면 리소스가 누출 될 위험이 있습니다. shared_ptr을 사용하면 콜렉션에 스트림을 저장하고 싶지 않을 때 불필요한 비용이 발생합니다. Unique_ptr이이를 해결합니다. 스트림을 안전하고 효율적인 방법으로 컬렉션에 저장할 수 있습니다.