Туговато у меня с классами, вопрос скорее о С++, но все же.
Написал такую прогу, теста ради:
#include <QtGui>
// ----------------------------------------------------------------------
class YLabel : public QLabel
{
};
// ----------------------------------------------------------------------
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QLabel l1("QLabel-l1");
YLabel l2;
l2.setText("YLabel-l2");
l1.show();
l2.show();
return app.exec();
}
YLabel l2("YLabel-l2");
main.cpp: In function `int qMain(int, char**)':
main.cpp:24: error: no matching function for call to `YLabel::YLabel(const char[10])'
main.cpp:23: note: candidates are: YLabel::YLabel()
main.cpp:13: note: YLabel::YLabel(const YLabel&)
mingw32-make[1]: *** [release/main.o] Error 1
В пустом класс есть только конструктор по умолчанию и конструктор копировщик.
При вызове: YLabel l2("YLabel-l2"); компилятор считает, что ты пытаешься таким образом обратиться к конструктору копировщику а привеления из строки к YLabel нет, вот и пишет ошибку.
Тебе нужно переопределить конструктор:
http://www.crossplatform.ru/documentation/qtdoc4.3/qlabel.php#QLabel-2
в твоем классе и все
А как это сделать?
я пытался так:
YLabel::YLabel(const QString &text, QWidget *parent, Qt::WindowFlags f)
: QLabel(text, parent, f)
{
}
Почти, нужно так:
class YLabel : public QLabel
{
public:
YLabel(const QString &text, QWidget *parent=0, Qt::WindowFlags f=0);
};
YLabel::YLabel(const QString &text, QWidget *parent, Qt::WindowFlags f) : QLabel(text, parent, f)
{
}
Книжки можно качнуть тут: http://privatelib.narod.ru
За книжки спасибо, я уже заказал на Ozon.ru Герберт Шилдт "Полный справочник по C++" должна в конце недели прийти.
Надеюсь она мне поможет.
ViGOur
я так делал тогда ругается так:
main.cpp: In function `int qMain(int, char**)':
main.cpp:31: error: no matching function for call to `YLabel::YLabel()'
main.cpp:16: note: candidates are: YLabel::YLabel(const YLabel&)
main.cpp:21: note: YLabel::YLabel(const QString&, QWidget*, Qt::WindowFlags)
YLabel l2;
l2.setText("YLabel-l2");
А в это случае так как ты переопределил конструктор, ты перекрыл конструктор по умолчанию, о чем тебе и говорит компилятор.
Так будет работать:
class YLabel : public QLabel
{
public:
YLabel( QWidget * parent = 0, Qt::WindowFlags f = 0 );
YLabel(const QString &text, QWidget *parent=0, Qt::WindowFlags f=0);
};
YLabel::YLabel( QWidget * parent, Qt::WindowFlags f): QLabel(parent, f){}
YLabel::YLabel(const QString &text, QWidget *parent, Qt::WindowFlags f) : QLabel(text, parent, f){}
Щас точно пойду нажрусь, в обед делал оба конструктора, не покатило, блин жаль, что перетер, щас бы сравнил.
Спасибо, работает.
Видать думал таки в правильном направлении, но где то чушь на порол.
ViGOur
Жду книжку, наверное только в пятницу прийдет.
Герберт Шилдт "Полный справочник по C++"
Как считаешь Хорошая?
Страуструпа не хочу, меня от него в сон клонет либомозги начинают булькать .
читал английскую версию http://en.wikibooks.org/wiki/C%2B%2B_Programming/TOC1
русская в этом именно месте(объектно-ориентированное програмирование) еще http://ru.wikibooks.org/wiki/Си%2B%2B#.D0.A1.D1.%38%30.D0.B5.D0.B4.D1.81.D1.82.D0.B2.D0.B0_.D0.BE.D0.B1.D1.8A.D0.B5.D0.BA.D1.82.D0.BD.D0.BE-.D0.BE.D1.%38%30.D0.B8.D0.B5.D0.BD.D1.82.D0.B8.D1.%38%30.D0.BE.D0.B2.D0.B0.D0.BD.D0.BD.D0.BE.D0.B3.D0.BE_.D0.BF.D1.%38%30.D0.BE.D0.B3.D1.%38%30.D0.B0.D0.BC.D0.BC.D0.B8.D1.%38%30.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F
Надоже, утро вечера всетаки мудренее
До меня до перло, что я не так в начале делал, я значения по умолчанию в конструкторах не указал.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)