Инициализация класса члена с конструктором не по умолчанию - PullRequest
4 голосов
/ 20 апреля 2011

Я пытаюсь создать графический интерфейс с классом SimpleWindow, который содержит класс textPanel:

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

Я хочу иметь возможность инициализировать text_panel_m, используя const char *, который преобразуется в 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)’:

Как мне инициализировать переменную-член text_panel_m без использования конструктора по умолчанию?

Ответы [ 4 ]

6 голосов
/ 20 апреля 2011

Вы почти у цели:

SimpleWindow::SimpleWindow():
        text_panel_m("default value")
{
}

Нужно добиться цели, используя неявный конвертирующий конструктор std::string из const char*.

5 голосов
/ 20 апреля 2011

Вы хотите безымянное временное значение в списке инициализатора.Одно простое изменение сделает это:

SimpleWindow::SimpleWindow():
         text_panel_m(std::string("default value"))
1 голос
/ 20 апреля 2011

Изменить

text_panel_m(std::string temp("default value"))

на

text_panel_m(std::string("default value"))
0 голосов
/ 20 апреля 2011

попробуйте str("string") и удалите бит std :: string.

В качестве альтернативы вы можете использовать конструктор по умолчанию в классе textPanel, который вызывает ваш строковый конструктор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...