2011-09-27 2 views
0

클래스 내에서 출력 파일 스트림을 정의하여 함수에 전달하지 않아도되도록하려면 어떻게해야합니까? 기본적으로 내가하고 싶은 것은 이것이다 : 클래스 내 출력 파일 스트림 정의

class A { 

private: 
    ofstream otp ; 

}; 

그런 다음 내 생성자에서, 단순히 otp.open("myfile"); 내가 otp.open("myfile", ios::app);이 다른 기능에있다, 그러나 그것은 말, 컴파일 시간 동안 실패

../thermo.h(18): error: identifier "ofstream" is undefined 
     ofstream otp ; 

I을 확실하게 만들었습니다 #include <fstream>

고마워요!

+0

각 기능에서'ofstream'을 재정의하는 것은 그리 큰 문제가 아니 겠지요 ... 내가하려고하는 것이 호기심을 위해서 가능할 지 궁금합니다. – Amit

답변

3

정규화 된 이름 std::ofstream을 사용해야합니다.

+0

Worked! 우수한. 고맙습니다. 왜 내가 네임 스페이스 표준을 사용할 때조차 그렇게해야하는지에 대한 작은 설명을 해 주시겠습니까? – Amit

+0

@Amit : include * (*가 있어야합니다!) 뒤에 * using namespace std를 넣으면 헤더가 파싱 될 때 선언이 아직 유효하지 않습니다. –

+0

음 ... 조금 혼란 스럽 습니다만, 기본적으로 저는 많은 것들을 포함하는 헤더 파일을 포함하고 있습니다. 그중 하나는' '입니다. 포함 끝 부분에' 네임 스페이스 표준을 사용합니다. 따라서이'global header file'을 포함하는 모든 함수에서'cout'과 다른'std ::'함수를 사용할 수 있습니다. 그렇다면 명시 적으로'std :: ofstream'을 선언하거나 내 '#include'globals.h 아래에'using namespace std'를 추가해야만했을까요? – Amit

0

당신도 장소를 클래스의 선언 위에 using namespace std; 문을 필요로하거나이 std 네임 스페이스에 존재하기 때문에 std::ofstream으로 otp 변수를 선언합니다.

+2

헤더에'using namespace std'를 사용하는 것이 옵션이라는 것을 사람들에게 말하지 마십시오. –

+0

globals.h "를"포함 "한다면,'globals.h'는'네임 스페이스 std;를 사용하고 있습니까? ' 어떻게 그것이 내'thermo.h' 파일로 변환되지 않습니까? – Amit

+0

@Amit'namespace std;를 사용하는 것이 다른 범위 ('namespace', function)에 있지 않습니까? – curiousguy