2010-02-26 3 views
2
void BinaryTree::InitializeFromFile(string Filename){ 
ifstream inFile; 
inFile.open(Filename, fstream::binary); 
if(inFile.fail()){ 
    cout<<"Error in opening file "<<Filename; 
    return; 
} 
for(int i=0;i<=255;i++) Freq[i]=0; 
    char c; 
    inFile.get(c); 
    while(!inFile.eof()){ 
    Freq[c] ++; 
    inFile.get(c); 
    } 
} 



HuffmanTree.cpp(293) : error C2664: 'void std::basic_ifstream<_Elem,_Traits>:: 
open(const wchar_t *,std::ios_base::openmode,int)' : cannot convert parameter 1 
from 'std::string' to 'const wchar_t *' 
1> with 
1> [ 
1>  _Elem=char, 
1>  _Traits=std::char_traits<char> 
1> ] 
1> No user-defined-conversion operator available that can perform this 
     conversion, or the operator cannot be called 

라인 293 ifstream::open내가 어떤 I/O 코드에 오류 C2664납니다

답변

4

대신 사용 Filename.c_str()의 호출 inFile.open(Filename, fstream::binary);

3

사용 Filename.c_str() 대신 Filename입니다 - open()은을지지 않습니다 std::string을 파일 이름의 매개 변수로 사용하십시오.

1

ifstream ctor는 const char *을 예상합니다. Filename.c_str()을 사용하십시오.

2

다소 복잡하여 ifstream::open은 C++이 아닌 C 문자열 std::string을 사용합니다. 줄을 다음과 같이 변경하십시오 :

inFile.open(Filename.c_str(), fstream::binary); 

나는 왜 C++ 표준 라이브러리의 디자이너가이 선택을했는지는 알지 못합니다.

+0

일반적으로 C++ 표준 라이브러리 디자인은 std :: string과 같이 사용하고 싶지 않은 기능을 사용자가 사용하지 않도록하기위한 것입니다. – MSN

+0

충분하지만,'std :: string'을 받아들이는 과부하를 제공하지 않아도 여전히 이상하게 보입니다. –