Search code examples
c++referenceconstructorinitialization-list

Initialize stringstream reference member in constructor initialization list with nothing


I tried to init a stringstream reference member with nothing, saying I wanted it to refer to null or just leave it un-initialized.

.hpp file

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

.cpp file

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

The compiler gives: Error 1 error C2758: 'Class::css' : must be initialized in constructor base/member initializer list

Do I have to initialize all the variables in the initialization list? Because I am not passing any stringstream reference to the constructor, how do I initialize it? Or if I don't want to initialize it, leave it blank. How do I do so?


Solution

  • References members must be initialized. You don't want a reference, you want a pointer.

    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)
    {}