我已經閱讀了關於該主題的多個問題和答案,但不幸的是他們都沒有幫助。我想使用相同的調試文件輸出中的兩個類A和B,其中A的一個實例創建B的一個實例我有類似:C++:在初始化列表中初始化對ofstream的引用
class A {
public:
A() : debug("debug.txt") { };
private:
std::ofstream debug;
}
class B {
public:
B(std::ofstream &ofs) : debug(ofs) { };
private:
std::ofstream &debug;
}
與
B *b = new B(debugUnderlying);
創建它的一個實例
它工作得很好。但是,我現在想要有一個額外的構造函數,可以在不使用流的情況下使用它。對象然後將打開一個新文件。我明白了,因爲我有一個參考,我需要在初始化列表中初始化它。我試過許多東西:
B() : debug() { debug.open("debug2.txt"); };
error: invalid initialization of non-const reference of type ‘std::ofstream& {aka std::basic_ofstream<char>&}’ from an rvalue of type ‘const char*’
或
B() : debug("debug2.txt") { };
error: value-initialization of reference type ‘std::ofstream& {aka std::basic_ofstream<char>&}’
或(很清楚,因爲我有一個臨時對象)
error: invalid initialization of non-const reference of type ‘std::ofstream& {aka std::basic_ofstream<char>&}’ from an rvalue of type ‘std::ofstream {aka std::basic_ofstream<char>}’
我怎樣才能做到這一點?感謝您的任何建議!
'B * b = new B(debugUnderlying);'停止Java編程 – Manu343726
您可以指定您的意思嗎?正如您可能已經猜到的,這不是原始代碼。 – Gunnar
您沒有任何理由動態分配'B'實例。 – Manu343726