为什么 istream_iterator<string>(ifstream( "test.txt" )) 会导致错误?
Why does istream_iterator<string>(ifstream("test.txt")) cause an error?
我尝试编写一段代码,从名为"test.txt"的文件中读取字符串,并将字符串写入标准输出。下面的代码运行良好:
int main()
{
using namespace std;
ifstream file("test.txt");
copy(istream_iterator<string>(file),
istream_iterator<string>(),
ostream_iterator<string>(cout, " "));
}
然而,经过此修改,代码不再编译:
int main()
{
using namespace std;
copy(istream_iterator<string>(ifstream("test.txt")), // <-- Error here
istream_iterator<string>(),
ostream_iterator<string>(cout, " "));
}
为什么这个版本不编译?
我使用的编译器是g++4.6.2,错误如下:
ex11-16.cpp:16:65: error: no matching function for call to 'std::istream_iterator<std::basic_string<char> >::istream_iterator(std::ifstream)'
ex11-16.cpp:16:65: note: candidates are:
.../bits/stream_iterator.h:72:7: note: std::istream_iterator<_Tp, _CharT, _Traits, _Dist>::istream_iterator(const std::istream_iterator<_Tp, _CharT, _Traits, _Dist>&) [with _Tp = std::basic_string<char>, _CharT = char, _Traits = std::char_traits<char>, _Dist = int, std::istream_iterator<_Tp, _CharT, _Traits, _Dist> = std::istream_iterator<std::basic_string<char> >]
.../bits/stream_iterator.h:72:7: note: no known conversion for argument 1 from 'std::ifstream {aka std::basic_ifstream<char>}' to 'const std::istream_iterator<std::basic_string<char> >&'
.../bits/stream_iterator.h:68:7: note: std::istream_iterator<_Tp, _CharT, _Traits, _Dist>::istream_iterator(std::istream_iterator<_Tp, _CharT, _Traits, _Dist>::istream_type&) [with _Tp = std::basic_string<char>, _CharT = char, _Traits = std::char_traits<char>, _Dist = int, std::istream_iterator<_Tp, _CharT, _Traits, _Dist>::istream_type = std::basic_istream<char>]
.../bits/stream_iterator.h:68:7: note: no known conversion for argument 1 from 'std::ifstream {aka std::basic_ifstream<char>}' to 'std::istream_iterator<std::basic_string<char> >::istream_type& {aka std::basic_istream<char>&}'
.../bits/stream_iterator.h:64:26: note: std::istream_iterator<_Tp, _CharT, _Traits, _Dist>::istream_iterator() [with _Tp = std::basic_string<char>, _CharT = char, _Traits = std::char_traits<char>, _Dist = int]
.../bits/stream_iterator.h:64:26: note: candidate expects 0 arguments, 1 provided
这里(我相信)有两个错误:
(1) 你需要把报价放在test.txt
:周围
istream_iterator<string>(ifstream("test.txt"), ... );
(2) 希望这能有所帮助!istream_iterator
的构造函数接受istream&
(即流的左值引用)。因此,您传入的流必须是一个左值。但是,传入ifstream("test.txt")
会传入ifstream
类型的临时对象,该对象是右值,而不是左值int function(int& x) {
x++;
}
int main() {
function(137); // Error - 137 is an rvalue, but lvalue is needed.
}
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- 为什么我在使用 istream 迭代器时会出现 seg 错误?
- 关于 istream 中的错误处理的问题
- 错误:与"运算符>>"不匹配(操作数类型为"std::istream
- 尝试重载时'ostream'和'istream'错误C++
- 错误:无法将"std::istream {aka std::basic_istream<char>}"lvalue 绑定到"std::basic_istream&<char>&
- C - iStream错误标志
- 错误:"运算符>>"不匹配 重载 istream 运算符
- C++,错误:" no operator "== " matches these operands ",ostream/istream
- C++的 istream::eof() 的不一致是规范中的错误还是实现中的错误?
- 错误在模板类中调用过载的ISTream运算符
- C++ istream >> 和 ostream << 错误
- 错误:"与'运算符<<'不匹配(操作数类型为 std::istream)
- 错误 C2061:语法错误:标识符"istream"
- C++:在达到'end of file'或错误后重置 istream
- 在使用异常时改进istream助手类的错误处理
- 需要有关此编译错误的帮助 getline 函数错误:没有匹配函数调用"getline(std::istream&,char&)"|
- 尝试从istream存储令牌时出现分段错误
- 使失败并显示错误"cannot convert ‘std::istream {aka std::basic_istream<char>}’ to ‘bool’ in return"