使用非默认构造函数初始化成员类

shu*_*e87 4 c++ initialization class

我正在尝试创建一个包含textPanel类的SimpleWindow类的gui:

class textPanel{
    private:
        std::string text_m;

    public:
        textPanel(std::string str):text_m(str){}
        ~textPanel();
};


class SimpleWindow{
    public:
        SimpleWindow();
        ~SimpleWindow();
        textPanel text_panel_m;
};

SimpleWindow::SimpleWindow():
        text_panel_m(std::string temp("default value"))
{
}
Run Code Online (Sandbox Code Playgroud)

我希望能够使用const char*初始化text_panel_m,它将转换为std :: string,而不需要创建另一个带有const char*的构造函数.我应该用const char*作为参数创建另一个构造函数吗?如果我这样做有没有办法减少使用c ++ 0x的冗余构造函数的数量?

使用上面的方法,我在初始化text_panel_m成员变量时遇到了困难.g ++给了我以下错误:

simpleWindow.cpp:49: error: expected primary-expression before ‘temp’
simpleWindow.cpp: In member function ‘bool SimpleWindow::drawText(std::string)’:
Run Code Online (Sandbox Code Playgroud)

如何在不使用默认构造函数的情况下初始化text_panel_m成员变量?

Mar*_*k B 6

你快到了:

SimpleWindow::SimpleWindow():
        text_panel_m("default value")
{
}
Run Code Online (Sandbox Code Playgroud)

应该这样做,使用std::string隐式转换构造函数const char*.


Mar*_*som 5

您需要初始化列表中的未命名临时值.一个简单的改变就是:

SimpleWindow::SimpleWindow():
         text_panel_m(std::string("default value"))
Run Code Online (Sandbox Code Playgroud)