我不想在main()中构造ofstream。这是我做的,但它没有编译:
#include <fstream>
using namespace std;
class test
{
private:
ofstream &ofs;
public:
test(string FileName);
void save(const string &s);
};
//----------------
test::test(string FileName)
: ofs(ofstream(FileName.c_str(),ios::out))
{
}
//----------------
void test::save(const string &s)
{
ofs << s;
}
//----------------
//Provide file name and to-be-written string as arguments.
int main(int argc,char **argv)
{
test *t=new test(argv[0]);
t->save(argv[1]);
delete t;
}
test.cpp: In constructor ‘test::test(std::string)’:
test.cpp:13: error: invalid initialization of non-const reference of type ‘std::ofstream&’ from a temporary of type ‘std::ofstream’
如何修复代码?
答案 0 :(得分:6)
表达式ofstream(FileName.c_str(),ios::out))
创建一个临时对象,该对象不能绑定到非const引用。
为什么不这样做呢(也请阅读评论):
class test
{
private:
ofstream ofs; //remove & ; i.e delare it as an object
public:
test(string const & FileName); //its better you make it const reference
void save(const string &s);
};
test::test(string const & FileName) //modify the parameter here as well
: ofs(FileName.c_str(),ios::out) //construct the object
{
}
希望有所帮助。
答案 1 :(得分:0)
仅在特殊情况下,您才将对另一个对象的引用用作类数据成员。通常,您希望类对成员对象具有生命依赖性。通常,您的班级将受限于复制和分配。如果确实需要引用,则必须已创建该对象。
呼叫者:
ofstream ouf("someFileName.txt");
test testObj(ouf)
你的班级标题:
test::test(ofstream& ous) : ofs(ous) { }