我有一个类别C1与公共成员如何初始化std :: ofstream的静态引用?
static std::ofstream &_rout;
在主文件
ofstream out("output.txt");
ofstream& Cl::_rout(out);
但我有一个编译错误:非法定义或重新定义。 我该如何纠正它?
我有一个类别C1与公共成员如何初始化std :: ofstream的静态引用?
static std::ofstream &_rout;
在主文件
ofstream out("output.txt");
ofstream& Cl::_rout(out);
但我有一个编译错误:非法定义或重新定义。 我该如何纠正它?
只能在静态/全球范围内
#include<CL.h>
ofstream& Cl::_rout(out);
int main() {
// ...
}
这是不可能重新设置它被宣布后(并初始化)的参考设置的参考。你可以实现你是什么后,使用指针,而不是引用:
class Cl {
static std::ofstream* _rout;
};
std::ofstream* CL::_rout = NULL;
int main() {
ofstream out("output.txt");
Cl::_rout = &out;
}
注意,指针会只有等到out
超出范围有效。如果这是一个问题,动态分配内存:
ofstream* out = new ofstream("output.txt");
Cl::_rout = out;
而且不要忘了delete
它时,你不再需要的对象以避免内存泄漏
嗯,你可以用下面的办法:
#include <fstream>
class CI
{
public:
static std::ofstream &_rout;
};
static std::ofstream out("output.txt");
std::ofstream& CI::_rout = out;
int main()
{
}
但是,这个问题的问题是输出文件的名称是固定的(硬编码到程序中)。
我建议你使用,而不是一个参考指针:
#include <cstddef>
#include <fstream>
class CI
{
public:
static std::ofstream *_rout;
};
std::ofstream* CI::_rout = NULL;
int main()
{
const char *output_file = "output.txt";
std::ofstream out(output_file);
CI::_rout = &out;
}
这[对我的作品(http://ideone.com/ujN6D)。你能否提供一个失败代码的完整示例,以及完整的错误消息? – 2012-04-17 15:42:26