无法在头文件中声明ifstream类成员

  发布于 2023-02-12 19:14

我试图在头文件中声明一个ifstream对象,如图所示,但我得到一个错误,说它无法访问.我尝试了各种各样的东西,比如把它变成指针,在.c文件中初始化等等,但是我的代码似乎无法获得它的声明.

ReadFile.h:

#ifndef READFILE_H
#define READFILE_H

#include "cv.h"
#include "highgui.h"
#include 
#include 

class ReadFile{

private:
    std::ifstream stream;

public:
    std::string read();

    ReadFile();                                 // Default constructor
    ~ReadFile();                                    // Destructor
};

#endif

ReadFile.c:#include"ReadFile.h"

ReadFile::ReadFile(){
stream.open("./data.txt");
}

ReadFile::~ReadFile(){
stream.close();
}

我得到的错误是:

Error   9   error C2248: 'std::basic_ifstream<_Elem,_Traits>::basic_ifstream' : cannot access private member declared in class 'std::basic_ifstream<_Elem,_Traits>' c:\users\Bob\documents\project\models\readfile.h    23  1   Project

输出是:

1>c:\users\Bob\documents\project\models\readfile.h(23): error C2248: 'std::basic_ifstream<_Elem,_Traits>::basic_ifstream' : cannot access private member declared in class 'std::basic_ifstream<_Elem,_Traits>'
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits
1>          ]
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\fstream(827) : see declaration of 'std::basic_ifstream<_Elem,_Traits>::basic_ifstream'
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits
1>          ]
1>          This diagnostic occurred in the compiler generated function 'ReadFile::ReadFile(const ReadFile &)'

std::ifstream stream;包含时会发生错误,删除此行时会消失.可能导致此错误的原因是什么?我错过了一些非常明显的东西,还是有更多的东西?

1 个回答
  • 问题是std::ifstream没有公共拷贝构造函数(因为复制一个没有意义)但是你的类的编译器生成的拷贝构造函数想要使用它.

    由于同样的原因,它没有任何可用的赋值运算符(即复制a std::ifstream是无意义的).

    您也应该禁止为您的班级复制和分配.

    一种简单的方法是添加

    private:
        ReadFile(const ReadFile&);
        ReadFile& operator=(const ReadFile&);
    

    如果您正在使用C++ 03,请到您的班级.

    在C++ 11中,使用= delete语法.

    public:
        ReadFile(const ReadFile&) = delete;
        ReadFile& operator=(const ReadFile&) = delete;
    

    2023-02-12 19:16 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有