label.h
Code: Select all
class Label : public Control {
public:
char* text;
}
test.cpp
Code: Select all
this->txt = new Label();
this->txt->text = "Test Text";
- ты пытаешься присвоить указателю this->txt->text адрес строки, созданной на статике в функции ApplicationWindow::init()
другими словами, то, что оно работает, это очень частный случай, так как у тебя все выполняется в теле этой самой функции. За пределами нее указатель text будет указывать на мусор. Следи на warnings компилятора.
Если ты хочешь присвоить строку переменной в этом случае нужно сделать это так:
static const sText[] = "Test Text";
this->txt->text = new char[strlen(sText) + 1];
strcpy(this->txt->text, sText);
далее, прямой доступ к мемберам класса -- это плохо. Очень настоятельно рекомендую использовать сетеры-гетеры, например
Code: Select all
label.h
class Label : public Control
{
private:
void ReleaseText();
char* text;
public:
Label();
~Label();
void SetCaption(const char* txt);
const char* GetCaption() const;
}
label.cpp
Label()
:text(NULL) // обезопасим все указатели, обнуляя их
{
}
~Label()
{
ReleaseText(); // удаляем текст, если он есть
}
ReleaseText()
{
if(text != NULL)
{
delete[] text;
text = NULL;
}
}
void Label::SetCaption(const char* txt)
{
ReleaseText();
text = new char[strlen(txt) + 1];
strcpy(text, sText);
}