函数不能被引用,因为它是一个已删除的函数
Function cannot be referenced as it is a deleted function
你好,我正在从一本书中学习C++,正在回答下面的一个练习问题
编写一个获取并返回istream&的函数;。函数应该读取流,直到它到达文件的末尾。函数应该将读取的内容打印到标准输出中。在返回流之前重置流,使其有效。
#include "stdafx.h"
#include <iostream>
#include <istream>
#include <string>
#include <string.h>
#include <list>
#include <vector>
#include <fstream>
std::istream ReadFile(std::istream &iStream)
{
std::string word;
while (iStream >> word)
{}
std::cout << "I read value " << word << std::endl;
iStream.setstate(std::ios::goodbit);
return iStream;
}
int _tmain(int argc, _TCHAR* argv[])
{
ReadFile(std::cin);
system("pause");
return 0;
}
以上是我的尝试,但是我在"return iStream"行出现错误。
Error1 error C2280: 'std::basic_istream<char,std::char_traits<char>>::basic_istream(const std::basic_istream<char,std::char_traits<char>> &)' : attempting to reference a deleted function
2 IntelliSense: function "std::basic_istream<_Elem, _Traits>::basic_istream(const std::basic_istream<_Elem, _Traits>::_Myt &) [with _Elem=char, _Traits=std::char_traits<char>]" (declared at line 77 of "C:Program Files (x86)Microsoft Visual Studio 12.0VCincludeistream") cannot be referenced -- it is a deleted function
我真的不知道这些错误是什么,我知道你可以删除一些东西,但我还没有谈到书中的那个话题。据我所知,我根本没有碰过istream文件。。。有人能帮帮我吗?
谢谢!
您可以;不要按值返回istream
,因为它;It’不可复制。
因为;s不可复制复制复制构造函数已被删除(以强制执行不可复制性),并且;这是诊断的直接技术原因。
所以,不是
std::istream ReadFile(std::istream &iStream)
…进行
std::istream& ReadFile(std::istream& iStream)
在其他新闻中,…
代替
#include "stdafx.h"
只需关闭Visual Studio项目设置中的预编译头即可。
这也为收割台夹杂物提供了更标准的一致性行为。
如果您不这样做;不要这样做,然后配置项目,以便任何关于跳过include的警告都会产生硬编译错误。
代替
iStream.setstate(std::ios::goodbit);
…进行
istream.clear();
而不是不可移植的微软怪物
int _tmain(int argc, _TCHAR* argv[])
只需使用标准
int main()
或者在C++11中的尾随返回类型语法中,
auto main() -> int
代替
system("pause");
只需在Visual Studio中通过Ctrl+F5运行程序。或者,在main
的最后一个右大括号上放置一个断点,然后在调试器中运行。或者,从命令行运行程序。
运动配方
"应该读取流,直到它到达文件末尾
是模棱两可的,但无论如何阅读单词,因为您;这样做并不能忠实地再现流中的空白。为了更准确地再现流内容,您可以逐字符读取字符,也可以(通过getline
)逐行读取。或者,您可以为此任务使用一种特殊的机制,即输出读取缓冲区,它在一个小语句中完成所有操作。
最后,您不会;I don’我不需要那些标题。您只需要<iostream>
,如果您选择读取行,还需要<string>
。此外,您不会;不需要main
末尾的return 0;
,因为;s为默认值。
已删除的函数是一个已显式禁用的特殊函数(构造函数、析构函数、运算符)。如果您仔细查看该错误,您可以看到该函数是basic_istream
复制构造函数,该构造函数被禁用,因为istreams无法复制。当return istream
时,您正试图复制istream,因为您的函数被声明为返回istream
(而不是例如返回对istream
的引用)。
- 函数向量_指针有不同的原型,我可以构建一个吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何仅为一个函数添加延迟
- 构造函数正在调用一个使用当前类类型的函数
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 如何创建函数管道,以便函数一个接一个地运行?
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 在c++中的复制构造函数/一个声明语句中的初始化的延续中使用chain方法
- C :基类调用自己的虚拟函数 - 一个反图案
- 如何在这个交换函数(一个单独的链表)中找到错误
- 两个相同的函数(一个使用模板模式,另一个不使用)
- 你怎么能一次给一个函数一个参数呢
- 为什么要做两个函数?(一个是非const,另一个是const)
- 当代码在其他地方使用时,如何保证函数一个接一个地被调用