2012-08-09 5 views
0

fstream 객체를 전달하고 해당 토큰을 토큰 화합니다. 항상 hasNextToken()에 파일을 열 수 없습니다. 누군가 나를 도울 수 있기를 바랍니다.fstream 파일을 읽을 수 없습니다.

//main.cpp

int main() { 
    string filename = "input.txt"; 
    fstream inputStream(filename); 
    Tokenizer t(inputStream); 
    while (t.hasNextToken()) { 
    cout << t.nextToken(); 
} 
} 

//Tokenizer.h

class Tokenizer { 
    fstream fin; 

public: 
    Tokenizer(fstream& file) 
    { 
     fin << file; 
    } 

    bool hasNextToken() { 
     if (!fin) { 
      cout << "Could not open file: " << endl; 
      exit(0); 
     } 
     return true; 
    } 

    string nextToken() { 
     string line; 
     getline(fin, line); 
     if (fin) { 
      istringstream sin(line); 
      string word; 
      sin >> word; 
      return word; 

     } 
    } 
}; 
+0

오류 메시지? –

+1

'fin'은 결코 초기화되지 않습니다. –

+0

이니셜 라이저 목록에 추가했지만 ios에 선언 된 비공개 멤버에 액세스하는 중 오류가 발생합니다. – newbieLinuxCpp

답변

1

이 시도 :이 작동하는지

class Tokenizer { 
    fstream& fin; 

public: 
    Tokenizer(fstream& file) 
    : fin(file) 
    {} 

... 
} 
+0

이렇게하면 다음 오류가 발생합니다. \ fstream (1347) : 오류 C2248 : 'std :: basic_ios <_Elem, _Traits> :: basic_ios': 'std :: basic_ios <_Elem, _Traits'클래스에 선언 된 전용 멤버에 액세스 할 수 없습니다. > ' – newbieLinuxCpp

+0

'fstream fin;에서'fstream & fin;'로의 변경을 놓친 것처럼 보입니다. – Axel

+0

감사합니다. 이제 텍스트 파일 내용을 인쇄하지만 여분의 쓰레기가 있습니다. – newbieLinuxCpp

0

잘 모르겠어요, 내가 할 수있는 지금 바로 테스트 해 보시고, 빨리 할 수 ​​있습니다 :

int main() { 
    string filename = "input.txt"; 
    fstream inputStream(filename, ios::in); // add second argument 
    // other stuff here 
} 

건배

관련 문제