我有一個類別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