2014-10-23 3 views
-3

Fl_Widget имеет следующий конструктор:преобразование между полукокса * и сопзЬ полукокса *

Fl_Widget (целое х, внутр у, Int W, внутр ч, Const символ * метка = 0L)

Как могу ли я послать char * вместо const char *? Я просто хочу использовать переменную char Tmp [255] в конструкторе.

+4

Просто послал его. Параметр 'const char *' может принимать 'char *'. – Galik

+1

Вы попробовали просто отправить его? 'char *' (и, следовательно, 'char [255]') преобразуется в 'const char *'. –

+1

И '0L'? Используйте nullptr – deviantfan

ответ

2

C++ допускает неявное литье T* в const T* для любого типа T, поэтому в вашем случае вы можете просто передать параметр функции.

Кроме того, если у вас есть Fl_Widget конструктор, то вы должны изменить значение по умолчанию для label от 0L к nullptr или 0 при использовании C++ 03 или более ранних версий.

(Для преобразования const T* в T* требует const_cast и может привести к непредсказуемому поведению).

+1

В более общих терминах 'const' всегда может быть неявно добавлен, но не удален без' const_cast', который в принципе никогда не будет использоваться. – bcrist

0

Если в данный момент выглядит т е р, как это, где foo ваш класс:

foo::foo() : FL_Widget(13, 13, 13, 13, Tmp){ 
    char Tmp[255]{"blah blah blah"}; 
} 

Это не законно. Вы не можете передать параметр родительскому ctor, который происходит в ctor вашего класса, это происходит потому, что родительский ctor происходит до вызова класса ctor.

Вы могли бы вместо того, чтобы сделать это: foo::foo() : FL_Widget(13, 13, 13, 13, "blah blah blah"){}

Смежные вопросы