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

2023-12-01

我试图在头文件中声明一个 ifstream 对象,如图所示,但收到一条错误消息,指出无法访问它。我尝试了各种方法,例如将其变成指针、在 .c 文件中初始化等,但我的代码似乎无法获取它的声明的一部分。

读取文件.h:

#ifndef READFILE_H
#define READFILE_H

#include "cv.h"
#include "highgui.h"
#include <iostream>
#include <fstream>

class ReadFile{

private:
    std::ifstream stream;

public:
    std::string read();

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

#endif

读取文件.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<char>
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<char>
1>          ]
1>          This diagnostic occurred in the compiler generated function 'ReadFile::ReadFile(const ReadFile &)'

错误发生在以下情况:std::ifstream stream;包含在内,并且当删除此行后将消失。什么可能导致此错误?我是否错过了一些非常明显的事情,或者还有更多的事情?


问题是std::ifstream没有公共复制构造函数(因为复制没有意义),但编译器为您的类生成的复制构造函数想要使用它。

出于同样的原因,它没有任何可用的赋值运算符(即复制std::ifstream是废话)。

您也应该禁止您的班级进行复制和作业。

一个简单的方法是添加

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

如果您使用的是 C++03,则可以添加到您的班级。

在 C++11 中,使用= delete syntax.

public:
    ReadFile(const ReadFile&) = delete;
    ReadFile& operator=(const ReadFile&) = delete;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在头文件中声明 ifstream 类成员 的相关文章

随机推荐