2015-11-27 2 views
1

прежде чем вы пометите его как дубликат, я уже прочитал следующее Q&A.fstream инициализация как класс

У меня есть простой класс под названием ATM:

ATM.h

class ATM { 
public: 
    ATM(Bank* ownerBank, const char* inputFile); 
    ~ATM(); 
    void performSingleATMAction(); 
    friend void* performSingleATMActionFunc(void* pVoidATM); 
private: 
    Bank* ownerBank; 
    string inputFile; 
    fstream fileReader; 
    Thread mainThread; 
    static const unsigned int ATM_SLEEP_TIME = 1000*100; 
}; 

Я пытаюсь инициализировать его с помощью списка инициализации:

ATM::ATM(Bank* ownerBank, const char* inputFile) : 
ownerBank(ownerBank), 
inputFile(inputFile), 
fileReader(inputFile,std::ifstream::in), // why copy constructor? 
mainThread(performSingleATMActionFunc,this) 
{} 

линия fileReader(inputFile,std::ifstream::in)

как-то вызывает конструктор копирования .., который является приватным

любая помощь?

+1

Возможно, вам придется опубликовать полный экземпляр, который может быть скомпилирован, и который показывает проблему, поскольку я не могу воспроизвести проблему в взломанной версии, основанной на коде, который вы опубликовали. –

+0

'// зачем копировать конструктор?' - что? Там нет конструктора копирования – sehe

ответ

0

На конечности вы, вероятно, копируете объекты типа ATM. Который - по умолчанию - копирует всех участников.

Для этого требуется конструктор копирования для потока.

Примечание: наличие фильтрующего элемента, входящего в класс ATM, является запахом дизайна для меня. Обычно в банкоматах нет файла «have-a». Итак, возможно, вам нужна функция (член) для чтения «транзакций» (просто гадание)

+0

, действительно, вы были правы. в классе «Банк» у меня был вектор ATM, где метод push_back вызывал конструктор копии по умолчанию ATM. – TheUpvoter

Смежные вопросы