您无法退货istream
按值,因为它不可复制。
由于它不可复制,复制构造函数已被删除(以强制不可复制性),这是诊断的直接技术原因。
所以,而不是
std::istream ReadFile(std::istream &iStream)
… do
std::istream& ReadFile(std::istream& iStream)
在其他新闻中,...
代替
#include "stdafx.h"
只需在 Visual Studio 项目设置中关闭预编译头即可。
这还为您提供了更符合标准的标头包含行为。
如果您不这样做,请配置项目,以便任何有关跳过包含的警告都会产生硬编译错误。
代替
iStream.setstate(std::ios::goodbit);
… do
istream.clear();
而不是不可移植的微软怪物
int _tmain(int argc, _TCHAR* argv[])
只需使用标准
int main()
或者在 C++11 尾随返回类型语法中,
auto main() -> int
代替
system("pause");
simply run your program via Ctrl+F5 in Visual Studio. Or, place a breakpoint on the last right brace of main
and run in the debugger. Or, run the program from the command line.
运动配方
”应该读取流直到到达文件末尾
是含糊不清的,但无论如何阅读words正如您所做的那样,并没有忠实地再现流中的空白。为了更准确地再现流内容,您可以阅读特点按字符,或(通过getline
) line按行。或者,您可以使用特殊机制来完成此任务,即输出读缓冲区,它在一个小语句中完成了所有操作。
最后,您不需要所有这些标头。你只需要<iostream>
,如果您选择读取行,也<string>
。另外,您不需要return 0;
在......的最后main
,因为这是默认值。