我有这段代码:
class myclass
{
ofstream &myfile;
public:
void init(ofstream &file)
{
myfile=file;
}
void say(int x)
{
myfile<<x;
}
}
但是我收到了这个错误:
Error 5 error C2280: 'std::basic_ofstream<char,std::char_traits<char>> &std::basic_ofstream<char,std::char_traits<char>>::operator =(const std::basic_ofstream<char,std::char_traits<char>> &)' : attempting to reference a deleted function
在这一行:
myfile=file;
我该如何解决?请注意,我想要一个我不应该改变这一行的解决方案:
myfile<<x;
答案 0 :(得分:0)
答案 1 :(得分:0)
必须在定义类时初始化引用。因此,您必须使用初始化列表创建构造函数并初始化myfile
:
class myclass {
ofstream& myfile;
public:
myclass(std::ofstream& file) : myfile(file) { }
void say(int x) {
myfile << x;
}
}
答案 2 :(得分:0)
引用类型(如ofstream&
)必须在初始化时绑定,一旦绑定,它就不能反弹到其他地方。我建议使用以下代码重新绑定:
class myclass {
ofstream* myfile = nullptr;
public:
void init(ofstream& file) {
myfile = &file;
}
void say(int x) const {
if (myfile) (*myfile) << x;
else ...
}
};