C ++揭秘第13章(2004)Jeff Kent:Ifstream程序没有返回预期的输出

时间:2015-06-30 12:44:02

标签: c++

C ++,未输出的预期输出取决于students.dat的存在。 如果students.dat尚不存在(并且尚未存在),则输出将为: “(infile)= 000000000(infile.fail())= 1”

#include <iostream>

#include <fstream>

#include <string>

using namespace std;

int main()

{

ifstream infile;
infile.open("students.dat");
cout << "(infile) = " << infile << endl;
cout << " (infile.fail()) = " << infile.fail() << endl;
return 0;

}

我收到的错误消息如下:

error C2678: binary '<<' : no operator found which takes a left-hand operand of type 'std::basic_ostream<char,std::char_traits<char>>' (or there is no acceptable conversion)

感谢你的支持,Scott Kelly

2 个答案:

答案 0 :(得分:1)

该代码从来没有真正起作用(将输入流写入输出流是什么意思?!)但是过去常常工作&#34;&#34;因为C ++ 03中的流有一个隐式转换为void*,可用于测试流的状态,因此您可以打印void*的值。

在C ++ 11中,转换已被替换为显式转换为bool,因此该代码的现代等价物(它更清楚它的作用)是:

cout << "(infile) = " << (bool)infile << endl;

或:

cout << "(infile) = " << static_cast<bool>(infile) << endl;

答案 1 :(得分:0)

我认为你是对的,这一定是一个版本问题,因为我的书已经很老了,而且我正在输入它所说的内容并且它无法正常工作。我想我应该从更新的书中学习。