【发布时间】:2012-06-13 13:14:42
【问题描述】:
我习惯了高级语言(java、python 等),这很明显。我正在尝试将用户输入的字符串传递给 cin,即要打开的文件的名称。似乎存在某种指针疯狂错误,我的代码将无法编译。 我删除了一些代码以使其更清晰。
#include <iostream>
#include <fstream>
using namespace std;
string hash(string filename);
int main(){
cout << "Please input a file name to hash\n";
string filename;
cin >> filename;
cout <<hash(filename);
return 0;
}
string hash(string filename){
file.open(filename);
if(file.is_open()){
file.close();
}
return returnval;
}
这是编译时错误。
<code>
$ g++ md5.cpp
md5.cpp: In function ‘std::string hash(std::string)’:
md5.cpp:22: error: no matching function for call to ‘std::basic_ifstream<char, std::char_traits<char> >::open(std::string&)’
/usr/include/c++/4.2.1/fstream:518: note: candidates are: void std::basic_ifstream<_CharT, _Traits>::open(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
</code>
(我知道有 md5 散列的库,但我正在尝试了解散列的工作原理,并最终了解散列冲突)
【问题讨论】:
-
在发布之前把你的行号和额外的间距去掉。这使得复制和粘贴代码进行测试变得困难。
-
@LokiAstari,我发现它为时已晚,但在大多数编辑器中,您可以使用 Ctrl+Alt+Selection 来选择包含数字的列并一次性删除它们。自从我发现它以来,为我节省了很多时间。