2013-12-22 142 views
0

我必须声明为private成员创建了这个类:错误C2248:无法访问

#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 < _Elem,_Traits> :: basic_ofstream”:不能访问类中声明私有成员 '的std :: basic_ofstream < _Elem,_Traits>'

所以任何人可以帮助我吗?

+2

你不能复制它。 – chris

+0

复制什么?代码有什么问题? – user2073081

+0

'std :: ofstream'是不可复制的。据推测,你试图复制你的类,默认的复制构造函数只是成员 - 复制文件流。 – chris

回答

-2

你不需要输入ofstream吗?我不认为你可以创建只有iostream和fstream的流。

+0

-1 ofstream包含在 Basilevs

+0

@Basilevs您的评论可以理解为“Thestream header is ...”和“Thestream type is ...”,因此要添加:没有ofstream header。流类型在''中定义。 – hvd

+0

@ hvd,我没有明白你的观点,但的确,在一个标题中定义了直接或间接在本身。我刚刚缩短了声明。 – Basilevs

0

您描述的错误不能来自您提供的代码;你的类声明没问题。它必须来自您的代码的不同部分,其中您试图复制XLSCreator课程,例如,通过调用拷贝赋值:当C++试图为您的类,它只是调用你声明的每个成员的拷贝赋值操作符default copy-assignment operator

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

的错误出现。 std::ofstream不可复制,因为@chris在注释中说,所以当编译器试图调用filecontents的复制赋值运算符时,它发现它不允许(operator=basic_ofstream内是私有的)。

为了解决这个问题,您可能需要确保你永远不会复制XLSCreator,或者明确地定义一个拷贝赋值运算符为XLSCreator,不知怎的,处理filecontents成员没有试图复制它。

相关问题