【问题标题】:fstream initialization as a classfstream 初始化为一个类
【发布时间】:2015-11-27 23:14:06
【问题描述】:

在您将其标记为重复之前,我已经阅读了以下Q&A

我有一个名为 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)

以某种方式调用复制构造函数..这是私有的

有什么帮助吗?

【问题讨论】:

  • 您可能必须发布一个可以编译并显示问题的完整示例,因为我无法在基于您发布的代码的破解版本中重现该问题。跨度>
  • // why copy constructor? - 什么?那里没有复制构造函数

标签: c++ constructor fstream


【解决方案1】:

您可能正在复制ATM 类型的对象。其中 - 默认情况下 - 复制所有成员。

这需要流的复制构造函数。

注意:让文件流成为 ATM 类的成员对我来说是一种设计味道。 ATM机通常没有“有”文件。所以,可能你需要一个(成员)函数来读取“交易”(只是猜测)

【讨论】:

  • 确实你是对的。在“银行”类中,我有一个 ATM 向量,其中 push_back 方法调用了 ATM 默认复制构造函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
  • 2019-06-25
  • 2017-10-14
相关资源
最近更新 更多