C++ I';我不明白为什么这一行显示了PC中的错误,但Mac可以处理它

C++ I';我不明白为什么这一行显示了PC中的错误,但Mac可以处理它,c++,fstream,C++,Fstream,在outfile=fstream(文件名)上那里显示了我的私有'ios_base::operator=(const ios_base&)不可访问,我不知道如何解决它,我正在使用clion编译它,但对于Mac,没有问题 class ErrorHandler{ private: std::fstream outfile; public: ErrorHandler(char const filename[]) { outfile = fstream(filenam

outfile=fstream(文件名)上那里显示了我的
私有'ios_base::operator=(const ios_base&)不可访问
,我不知道如何解决它,我正在使用clion编译它,但对于Mac,没有问题

class ErrorHandler{
private:

    std::fstream outfile;

public:
    ErrorHandler(char const filename[]) {

        outfile = fstream(filename);

        outfile << filename << " opened"  << endl;
    }

    ~ErrorHandler(){

    }

    void warn(char const message[]){

        cout << message << endl;

        outfile << message << endl;

    }


    void terminate(char const message[]){

        cout << message << endl;

        outfile << message << endl;

        exit(1);

    }
};

int main() {

    ErrorHandler h("log.txt");

    h.warn("Error 10: this is your first warning");
    h.warn("Error 20: I warned you");
    h.terminate("Error 30:  Told you so.");

    return 0;
}
类错误处理程序{
私人:
std::fstream输出文件;
公众:
ErrorHandler(字符常量文件名[]){
outfile=fstream(文件名);

outfile您的问题是无法将一个
fstream
分配给另一个,这正是分配它时发生的情况

您有几个选项,但最简单的是将
outfile
声明为
std::fstream*
,然后在构造函数中:

outfile = new fstream(filename);

请记住在你的析构函数中删除它。< /P>正确地将代码格式化为一个按钮。你是否正在至少C++ 11上编译PC?最后一次编辑这个帖子删除了主帖子中的实际错误信息并将其包含在代码中。我不确定它是否是C++ 11以上,我刚学会C++,你能帮我吗?我应该知道吗?这里真的不需要动态分配,甚至不需要指针。谢谢你回答我的问题,但是我的朋友用Mac复制的代码和我的完全一样,没有任何错误,我不知道为什么在PC上会出错。我的教授给我的这个代码,他运行的很好well@user6482243它不是有效的C++。我不能。想象一下你的朋友是如何让它编译的,但是他们的代码可能不同。让我再次检查一下问题,可能是出了什么问题,非常感谢你。当我删除那个错误语句时,它可以正常运行,没有任何错误,这合法吗?