为什么在以下代码中指令os->operator>> input
错误?不是运算符的返回值>>对象* os?
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
double input;
ifstream * os = new ifstream("prova.dat");
os->operator>> input;
return 0;
}
答案 0 :(得分:5)
如果要将>>
用作方法,则需要像()
一样传递参数,就像普通函数一样。要取消引用它,您应该使用以下两种方式:
os->operator >> (input);
或
*os >> input;
注意:为什么指针,何时可以使用自动对象或引用。此外,您需要管理已分配的对象并将其释放。
答案 1 :(得分:1)
如果您正在创建指向此类流的指针,那么您可能做错了。
这应该可以正常工作:
int main()
{
double input;
std::ifstream os("prova.dat");
os >> input;
return 0;
}
因为ifstream
已在堆栈上分配,所以当函数完成时它将自动清除,这将关闭底层文件句柄。您错过了明确的delete
,您需要在代码中执行相同操作。
如果你需要传递你的流,你可以参考:
double read_double(std::ifstream& stream)
{
double d;
stream >> d;
return d;
}
int main()
{
std::ifstream os("prova.dat");
double input = read_double(os);
return 0;
}