Я создаю этот класс:
#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>'
Так может кто-нибудь помочь мне с этим?
Описанная вами ошибка не могла исходить из кода, который вы предоставили; ваша декларация класса прекрасна. Должно быть, это произошло из другой части вашего кода, в которой вы попытались скопировать класс XLSCreator
, например, путем вызова назначения копирования:
XLSCreator foo("filename");
XLSCreator bar = foo; //copies foo to create bar
Ошибка возникает, когда C++ пытается создать оператор присваивания по умолчанию для вашего класса, который просто вызывает оператор присваивания копий каждого участника, которого вы объявили. std::ofstream
не копируется, как указано в комментариях @chris, поэтому, когда компилятор пытается вызвать оператор присваивания filecontents
, он обнаруживает, что ему не разрешено (operator=
является private в basic_ofstream
).
Чтобы исправить это, вам нужно либо гарантировать, что вы никогда не копируете XLSCreator
, или явно не определяете оператор копирования для XLSCreator
который каким-то образом обрабатывает filecontents
не пытаясь его скопировать.
Вам не нужно импортировать поток? Я не думаю, что вы можете создавать потоки с помощью только iostream и fstream.
<fstream>
.