LINUX.ORG.RU

[Qt] Наследование, создание класса


0

1

Мне нужно добавить функцию (метод) к QCryptographicHash

Делаю для примера

class MyMD5Sum : public QCryptographicHash
{
public:
    int test(){return 0;};
};

...
MyMD5Sum a; //(1)
или
MyMD5Sum a(QCryptographicHash::Md5); //(2)

В случаю (1) получаю:

./untitled/mainwindow.cpp: In constructor ‘MyMD5Sum::MyMD5Sum()’: 
../untitled/mainwindow.cpp:8: error: no matching function for call to ‘QCryptographicHash::QCryptographicHash()’ 
/home/f3ex/qtsdk-2010.04/qt/include/QtCore/qcryptographichash.h:76: note: candidates are: QCryptographicHash::QCryptographicHash(const QCryptographicHash&) 
/home/f3ex/qtsdk-2010.04/qt/include/QtCore/qcryptographichash.h:64: note: QCryptographicHash::QCryptographicHash(QCryptographicHash::Algorithm) 
../untitled/mainwindow.cpp: In constructor ‘MainWindow::MainWindow(QWidget*)’: 
../untitled/mainwindow.cpp:18: note: synthesized method ‘MyMD5Sum::MyMD5Sum()’ first required here 
make: *** [mainwindow.o] Ошибка 1 

В случаю (2) получаю:

../untitled/mainwindow.cpp: In constructor ‘MainWindow::MainWindow(QWidget*)’: 
../untitled/mainwindow.cpp:18: error: no matching function for call to ‘MyMD5Sum::MyMD5Sum(QCryptographicHash::Algorithm)’ 
../untitled/mainwindow.cpp:8: note: candidates are: MyMD5Sum::MyMD5Sum() 
../untitled/mainwindow.cpp:8: note: MyMD5Sum::MyMD5Sum(const MyMD5Sum&) 
make: *** [mainwindow.o] Ошибка 1 

Как правильно надо сделать наследование и сделать свой класс ?

★★

QCryptographicHash не умеет конструтора по умолчанию. тебе надо создать свой конструтор

[code]

MyMD5Sum::MyMD5Sum() : QCryptographicHash(QCryptographicHash::Md5) { }

[/code]

ну или с парамтером

namezys ★★★★ ()

Открой Страуструпа да посмотри.

anonymous ()
Ответ на: комментарий от namezys

А как это определяется, что нет своего конструктора? В документации:

Public Functions

QCryptographicHash ( Algorithm method )

Или ссылку на пример. Хочу осознать этот момент.

И да, спасибо. Всё заработало как надо.

f3ex ★★ ()
Ответ на: комментарий от f3ex

Это конструктор родителя. У MyMD5Sum должен быть свой.

KblCb ★★★★★ ()
Ответ на: комментарий от f3ex

да, и действительно, некогда сейчас книжки читать, язык учить... код писать надо! а вы тут со своими страусами!!!

ой, оспади, куда катится этот мир... пора выдавать лицензию на право праграммировать...

Cy6erBr4in ★★★ ()
Ответ на: комментарий от namezys

Ну вот, это правильно. Строже надо, строже со студентами! Да я так, просто небольшую тулзу для себя пишу в свободное время =)

А вообще да, прочитал главу про наследование, в общем мне стыдно, да, за такой вопрос =) :-[

f3ex ★★ ()
Ответ на: комментарий от f3ex

>>А как это определяется, что нет своего конструктора?

ты не читаешь что тебе пишут. namezys писал о конструторе по умолчанию. Если в классе определён хотя бы один конструктор, то автоматическое создание конструктора не происходит, поэтому QCryptographicHash не имеет конструктора по умолчанию QCryptographicHash(). Так задумали авторы - хеш можно создать только явно указав алгоритм, тебе надо аналогично.

alex_custov ★★★★★ ()
Ответ на: комментарий от namezys

> если принимать экзамен будут такие, как я - то ее мало кто получит

Действительно, достаточно будет спросить «а в чём профит const В C++?» 8))))

kemm ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.