Ошибка C2248: невозможно получить доступ к закрытому члену, объявленному в классе

0

Я создаю этот класс:

#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
    Вы не можете скопировать это.
  • 0
    Скопировать что? что не так с кодом?
Показать ещё 3 комментария
Теги:
class
ofstream

2 ответа

0

Описанная вами ошибка не могла исходить из кода, который вы предоставили; ваша декларация класса прекрасна. Должно быть, это произошло из другой части вашего кода, в которой вы попытались скопировать класс XLSCreator, например, путем вызова назначения копирования:

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

Ошибка возникает, когда C++ пытается создать оператор присваивания по умолчанию для вашего класса, который просто вызывает оператор присваивания копий каждого участника, которого вы объявили. std::ofstream не копируется, как указано в комментариях @chris, поэтому, когда компилятор пытается вызвать оператор присваивания filecontents, он обнаруживает, что ему не разрешено (operator= является private в basic_ofstream).

Чтобы исправить это, вам нужно либо гарантировать, что вы никогда не копируете XLSCreator, или явно не определяете оператор копирования для XLSCreator который каким-то образом обрабатывает filecontents не пытаясь его скопировать.

-2

Вам не нужно импортировать поток? Я не думаю, что вы можете создавать потоки с помощью только iostream и fstream.

  • 0
    -1 ofstream включен в <fstream>
  • 0
    @Basilevs Ваш комментарий можно прочитать так: «Заголовок ofstream - это ...» и «Тип ofstream - это ...», поэтому добавим: заголовок ofstream отсутствует. Тип ofstream определен в <fstream> .
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню