2012-11-23 101 views
0

我試圖初始化一個沒有任何內容的stringstream引用成員,並說我希望它引用null或只是讓它未初始化。在構造函數初始化列表中初始化stringstream引用成員不爲空

.HPP文件

class Class{ 
    private: 
     int n; 
     stringstream& css; 
    public: 
     Class(int n); 
     Class(stringstream& ss, int i); 
    }; 

cpp文件

Class::Class(int n) 
    : n(n)  
{} 

編譯器給出: 錯誤1個錯誤C2758: '級:: CSS':必須構造鹼進行初始化/成員初始列表

我是否必須初始化初始化列表中的所有變量? 因爲我沒有將任何stringstream引用傳遞給構造函數,我該如何初始化它?或者如果我不想初始化它,請將其留空。我該怎麼做?

回答

3

參考成員必須被初始化。你不想要一個引用,你想要一個指針。

class Class{ 
private: 
    int n; 
    stringstream* css; 
public: 
    Class(int n); 
    Class(stringstream& ss, int i); 
}; 

Class::Class(int n) 
    :n(n), css(nullptr)  
{} 

Class::Class(stringstream& ss, int i) 
    :n(i), css(&ss) 
{} 
+1

你不想要一個指針,你想要一個智能指針。 –

+2

@LuchianGrigore:不,智能指針是所有權。這是一個可以空的參考。這是原始指針仍然有用的剩餘功能之一。 –

+0

我不關注。使用'shared_ptr'有什麼問題? –

相關問題