我在某些I / O代码上遇到错误C2664

时间:2010-02-26 18:39:59

标签: c++ visual-c++ huffman-code

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行是inFile.open(Filename, fstream::binary);

4 个答案:

答案 0 :(得分:4)

使用Filename.c_str()而不是open()不会将std::string作为文件名的参数。

答案 1 :(得分:3)

Filename.c_str()

的调用中使用Filename代替ifstream::open

答案 2 :(得分:2)

有些困惑,ifstream::open采用C字符串,而不是C ++ std::string。将行更改为:

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

我不知道为什么C ++标准库的设计者做出了这个选择,但是你去了。

答案 3 :(得分:1)

ifstream ctor期待const char *。使用Filename.c_str()