- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我尝试编写代码从名为“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
的临时对象,它是一个 rvalue 而不是 < em>左值。这与您不能这样做的原因相同:
int function(int& x) {
x++;
}
int main() {
function(137); // Error - 137 is an rvalue, but lvalue is needed.
}
希望这对您有所帮助!
关于c++ - 为什么 istream_iterator<string>(ifstream ("test.txt")) 会导致错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17246720/
#include #include #include #include using namespace std; int main() { vector v(istream_itera
嗨,我希望有人能帮助理解下面代码的这种行为。 #include #include #include #include #include #include #include struct
我尝试实现“C++ 标准库”第 107 页中的流迭代器示例。我被困在这条线上: copy (istream_iterator(cin), istream_iterator(), back_insert
我在将 istream_iterator 用于我需要的目的时遇到困难。我有一个文件,我想将其逐行读取到一个集合中。我必须使用迭代器,我想知道我的代码或我的方法是否有问题。 非常感谢您的帮助。这是我正在
好吧,你们对我的最后一个问题很有帮助,所以我会尝试另一个问题。这也是作业,虽然上一个很旧,但已提交并等待标记。所以如果有什么东西会咬我,那可能就是这个问题。我混淆了类(class)名称等,因为仍然可以
我有两段代码。它们在 main() 中单独使用时可以正常工作。 vector v; cout start_cin(cin); istream_iterator end_of_cin; copy(st
我不明白为什么第二个参数 for_each 是一个空迭代器。有人可以向我解释一下吗? fstream("datfile.txt"); for_each(istream_iterator(datfile
给定一个包含以下十六进制代码的文件:0B 00 00 00 00 00 20 41 我正在尝试填充一个 std::vector ,然后手动检查每个字节。 这是我使用迭代器构造函数从两个 std::is
我尝试实现“C++ 标准库”第 107 页中的流迭代器示例。我被困在这条线上: copy (istream_iterator(cin), istream_iterator(), back_insert
给定一个包含以下十六进制代码的文件:0B 00 00 00 00 00 20 41 我正在尝试填充一个 std::vector ,然后手动检查每个字节。 这是我使用迭代器构造函数从两个 std::is
这是一个 Minimal, Complete, Verifiable Example我知道这不是copacetic。无论如何,给定结构: struct Foo { int even;
如果您将输入编码为 std::istream_iterator ii(std::cin); std::istream_iterator eos; std::for_each(ii,eos,record
我从标准输入得到以下输入: 2 5 2 1 5 3 4 5 2 5 1 3 4 第一行代表队列数(我们称这个值为n)。然后,对于每个队列,在第一行有一个值 l 表示队列的长度,后面是实际队列。 我正在
我正在尝试通过使用 std::distance 作为 vector 的构造函数参数来计算 std::cin 读取的元素数量,就像这样: // Gives correct amount, but now
我编写了以下程序,从 std::cin 读取 3 个数字,并将它们输出到 std::cout , 并执行两次: #include #include #include int main() {
在这种情况下,当从控制台获取字符串输入时,源代码结尾是什么? int main() { std::vector str; copy (istream_iterator(std::cin),
我在 istream_iterator 读取文件时遇到问题,因为它会忽略空行,但我需要将这些空行包含为“”。 我应该如何修改下面的程序以获得 vector 中的 5 条线? #include #in
我想读取以下输入: Foo 1 2 4 Bar 3 4 5 作为两个独立的“字符串”对象。 是否可以使用 istream_iterator 来完成此操作? 我在哪里可以找到所有这些迭代器的好文档? 最
我可以在两个 istream_iterators 之间进行赋值操作吗?如果是这样,那么行为会是什么,即两个迭代器是否会指向文件中的同一位置,即我们会得到两个指向文件中同一行的指针吗? 如果是这样,我可
我正在尝试从 ifstream fin 中读取并使用 istream_iterators 将其放入 vector vec1 中。我到处都看到了这些东西: vector vec1((istream_it
我是一名优秀的程序员,十分优秀!