大佬教程收集整理的这篇文章主要介绍了为什么使用引用成员可以防止删除的构造函数错误? 上下文,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有两个类(简化为相关声明):
#include <String>
#include <fstream>
class Lexer
{
std::ifstream file_;
Lexer(std::string &filE) : file_(filE){};
};
class Parser
{
Lexer lexer_;
Parser(Lexer &leX) : lexer_(leX){};
};
编译失败,报错
错误:使用已删除的函数 'std::basic_ifstream<_chart _traits="">::basic_ifstream(const std::basic_ifstream<_chart _traits="">&) [with _CharT = char; _Traits = std::char_Traits]'
在最终找到 Error where no default constructor exists for a class 之后,我想我现在明白了:
ifstream
有一个已删除的默认构造函数,它阻止 Lexer
在 Parser
中使用,因为它没有被提供一个字符串(而 Lexer
类本身编译正常)。Lexer
直接取一个 ifstream
仍然会出现错误(类似上面的推理),因为它还有一个已删除的复制构造函数。file_
成为引用成员(即 std::ifstream &file_;
),解决了缺少复制构造函数的问题,因为成员初始化程序不再尝试使用复制构造函数(因为它只是一个引用)。 我的问题是:
Lexer
类(如上)?ifstream
确实有一个默认构造函数。由于删除了复制构造函数而粘贴的错误。您编写的代码将不起作用,因为 Lexer
无法使用默认值进行复制构造,因为 ifstream
不可复制。
所以,回答你的问题:
以上是大佬教程为你收集整理的为什么使用引用成员可以防止删除的构造函数错误? 上下文全部内容,希望文章能够帮你解决为什么使用引用成员可以防止删除的构造函数错误? 上下文所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。