我可以使用在类构造函数中初始化的ofstream类型的成员变量吗?

Bao Ling

我在声明继承类的构造函数时遇到问题。

class Report{
public:
    string fileName;
    std::ofstream outputFile;

    Report(string fileName, ofstream outputFile) {

        fileName = fileName;
        outputFile = outputFile; //<-- error here
    }

    void returnFile(string, ofstream);

    void Report::returnFile(string name, ofstream file){

         file.open(name);
    }
};

class financialReport: public Report{
public:
    void electorateHappenings();
    void electorialImpact();
    double finances();
    void writetoFile();

    financialReport(string fileName, ofstream outputFile)
    :Report(fileName, outputFile) { } //<-- error here
};

错误发生在最后3行:Report(fileName, outputFile)

这行产生错误:

function "std::basic_ofstream<_CharT, _Traits>::basic_ofstream(const
 std::basic_ofstream<_CharT, _Traits> &) [with _CharT=char, 
_Traits=std::char_traits<char>]" (declared at line 848 of 
"C:\MinGW\lib\gcc\mingw32\9.2.0\include\c++\fstream") cannot be referenced 
-- it is a deleted function

创建包括的构造函数是不可能的ofstream吗?

该错误还会在第9行出现outputFile = outputFile

谢谢。

阿纳斯塔丘

您不能通过复制传递它,也不能复制一个,但是可以通过引用传递它并在类的初始化器列表中对其进行初始化:

演示版

class Report {
public:
    string fileName;
    std::ofstream &outputFile; //reference here

    // reference parameter, and initializer list
    Report(string fileName, ofstream &outputFile) : outputFile(outputFile) {
        fileName = fileName;
    }
    //...
};

financialReport

financialReport(string fileName, ofstream& outputFile) : Report(fileName, outputFile) {}
                                         ^

请注意,这通常是对问题的解决方案,但是在更深入的分析中,尽管您没有详细说明要实现的目标,但我不会说它是这是错误的方法,但是您可能会以更好的方式构造程序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在构造函数中初始化类成员变量

我可以使用构造函数在带有1的模板和相关结构的类中初始化任意数量的元素吗?

我可以检查构造函数主体中在初始化列表中设置的变量吗?

如何使可以使用Typescript中的对象或常规参数构造函数初始化的类?

是否可以在构造函数体内而不是初始化列表中初始化成员变量?

我在构造函数中使用什么类型来初始化由无名枚举定义的成员变量?

如何在派生类构造函数中初始化基类成员变量?

cppcheck:构造函数中未初始化的成员变量

可以在C ++构造函数中初始化const成员吗?

可以使用C ++聚合初始化来构造实现接口的类的实例吗?

具有默认构造函数已删除的类类型可以默认初始化吗?

C ++的类变量可以在没有Java构造函数的情况下初始化吗?

我可以使用多个具有多个返回值的函数在if块的开头初始化多个变量吗?

我们可以在构造函数内部初始化静态变量吗?

在调用基类构造函数之前,初始化派生类成员变量。这是UB吗?

我可以使用其基类的实例初始化派生的数据类吗?

使用可变参数类模板类型的成员函数的结果初始化数组吗?

使用类成员函数初始化变量

使用类成员函数/变量初始化默认参数

使用移动语义在构造函数中初始化类成员

Java构造函数中类变量的初始化

在类的构造函数中初始化ifstream变量

在没有构造函数的类中初始化变量

可以在类构造函数中初始化线程导致崩溃吗?

我可以使用元组在一行中声明和初始化多个变量吗?

我可以使用类型作为值(或从构造函数参数正确推断通用类类型)吗?

我可以使用.vue类组件初始化vue根实例吗?

我应该只将构造函数用于 C++ 中的变量初始化吗?

在类声明或构造函数初始化器列表中初始化简单成员