std::istream_iterator<double> 成员变量在递增时失败
std::istream_iterator<double> member variable fails while incrementing
我的程序如下:
#include <iostream>
#include <iterator>
#include <fstream>
#include <string>
class Stream{
public:
//default constructor
Stream();
//constructor
Stream(const std::string&);
//Returns true if more elements are available
bool hasNext();
//Get the next element in the stream
double getNext();
private:
std::istream_iterator<double> streamHandle;
std::istream_iterator<double> eos;
};
Stream::Stream()
{
streamHandle = std::istream_iterator<double>(std::cin);
}
Stream::Stream(const std::string& absolutePath)
{
std::fstream file(absolutePath);
streamHandle = std::istream_iterator<double>(file);
}
bool Stream::hasNext()
{
return (streamHandle != eos)? true: false;
}
double Stream::getNext()
{
double value = *streamHandle;
++streamHandle;
return value;
}
int main()
{
Stream input("test1");
if( input.hasNext())
std::cout << input.getNext();
}
执行此程序时,它是核心倾销。我知道只有执行语句++streamHandle;
因此,我在不使用以下类的情况下实现了相同的功能,并且效果很好。
#include <iostream>
#include <iterator>
#include <fstream>
#include <string>
void readFile(const std::string& absolutePath)
{
std::fstream file(absolutePath);
std::istream_iterator<double> streamHandle = std::istream_iterator<double>(file);
std::istream_iterator<double> eos;
while( streamHandle != eos)
{
double val= *streamHandle;
++streamHandle;
std::cout << val << "n";
}
}
int main()
{
readFile("test1");
}
您可以帮助我确定创建课程时出了什么问题,并通过班级迭代std::istream_iterator<double>
。
您的问题确实在于
Stream::Stream(const std::string& absolutePath)
{
std::fstream file(absolutePath);
streamHandle = std::istream_iterator<double>(file);
}
在上面的构造函数中,您创建本地文件流并将迭代器设置为此。不幸的是,当构造函数退出文件流时,将关闭文件并将迭代器留在无效状态下。试图使用迭代器之后是不确定的行为,并导致核心转储。
相关文章:
- 从类型std::函数传递变量失败,尽管调用方期望的类型完全相同
- 运行时检查失败 #2 变量"A"周围的堆栈已损坏
- docker 构建失败:无法设置环境变量
- 运行时检查失败 #2 - 变量"e"周围的堆栈已损坏。发生
- 是变量初始化失败吗?
- 当变量和参数名称匹配时,移动语义构造失败
- 运行时检查失败 #2 - 变量周围的堆栈'...'已损坏
- 类模板在其构造函数中的模板变量推导失败
- 运行时检查失败 #2 - 变量"l1"周围的堆栈已损坏
- C++:此代码可以编译,但引发运行时检查失败 #2 - 围绕变量周围的堆栈'num'已损坏。发生
- 运行时检查失败 - 变量周围的堆栈已损坏
- 为什么通过通用引用运算符 (&&) 将变量的引用传递给 Varadic 模板函数失败?
- 在构造函数中设置变量失败?
- 调试:运行时检查失败 #2 - 变量"LoggerThread"周围的堆栈已损坏
- 运行时检查失败 #2 - 变量周围的堆栈'k'已损坏
- 运行时检查失败 #2 - 变量"数字选择"周围的堆栈已损坏
- 与原子变量的非原子负载会导致原子变量失败
- 为什么在我的代码中将值从构造函数 var 传递到类变量失败?C++
- 模板函数中的静态变量失败
- 无符号char类型变量I/O失败