错误C2248:无法访问类中声明的私有成员

时间:2013-12-22 08:13:20

标签: c++ class ofstream

我创建了这个类:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

class XLSCreator
{
private:
    ofstream filecontents;
    int fileType;
    int cellNumber;
    int rowsNumber;
public:
    XLSCreator(string);
    ~XLSCreator();
    void createType1File(string, string, string);
    void createType2File(string, string, string, string, string);
    void addNewRow();
    void addData(string);
    void saveFile();
};

但是当我尝试构建它时,它给了我这个错误:

错误2错误C2248:'std :: basic_ofstream&lt; _Elem,_Traits&gt; :: basic_ofstream':无法访问类'std :: basic_ofstream&lt; _Elem,_Traits&gt;'

中声明的私有成员

有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:0)

您描述的错误不可能来自您提供的代码;你的班级声明没问题。它必须来自您的代码的不同部分,您尝试复制XLSCreator类,例如通过调用副本分配:

XLSCreator foo("filename");
XLSCreator bar = foo; //copies foo to create bar

当C ++尝试为您的类生成default copy-assignment operator时,会出现错误,该类只调用您已声明的每个成员的复制赋值运算符。 std::ofstream是不可复制的,正如@chris在评论中所说,所以当编译器试图调用filecontents的复制赋值运算符时,它会发现它不被允许({{ 1}}在operator=)内是私有的。

为了解决这个问题,您需要确保永远不要复制basic_ofstream,或明确定义XLSCreator的复制赋值运算符,以某种方式处理XLSCreator成员而不尝试复制它。

答案 1 :(得分:-2)

你不需要导入ofstream吗?我不认为你可以用iostream和fstream来创建流。