Название: overload функции и наследование
Отправлено: kuzulis от Июнь 11, 2009, 14:24
Доброго времени суток! Тут столкнулся с одной непоняткой: есть базовый класс: class TBaseSerialDevice : public QIODevice { ... public: .... virtual bool setBaudRate(TBaudRate baudRate=BaudRate9600) { parameters->m_baudRate=baudRate; return true; } bool setBaudRate(const QString &baudRate) { return setBaudRate(maps->baudRateMap.key(baudRate)); } //перегружаемая функция .... private: MyType parameters; //упрощенно QMap<int, QString> baudRateMap; //упрощенно }
есть наследник от TBaseSerialDevice class TWinSerialDevice : public TBaseSerialDevice { .... bool setBaudRate(TBaudRate baudRate); {//тут уже другая реализация нежели в TBaseSerialDevice т.е я переопределяю эту виртуальную ф-ю } .... }
и при комниляции в том месте где main.cpp вызывается этот метод bool TWinSerialDevice::setBaudRate(const QString &baudRate) пишет: .... main.cpp:32: error: no matching function for call to `TWinSerialDevice::setBaudRate(QString&)' ../../src/winserialdevice.h:18: note: candidates are: virtual bool TWinSerialDevice::setBaudRate(TBa seSerialDevice::TBaudRate) ....
Почему нет точки вызова функции bool TWinSerialDevice::setBaudRate(const QString &baudRate) ??? ведь TWinSerialDevice должна унаследовать от TBaseSerialDevice этот метод !!! о_О
Название: Re: overload функции и наследование
Отправлено: pastor от Июнь 11, 2009, 14:29
А покажи код main.cpp
Название: Re: overload функции и наследование
Отправлено: kuzulis от Июнь 11, 2009, 14:39
вот /* \en Test application to default parameters \ru Тестовое приложение для параметров по умолчанию */
#include <QtCore> #include <winserialdevice.h>
class TWinSerialDevice;
int main(int argc, char *argv[]) { QCoreApplication app(argc, argv);
TWinSerialDevice *MyDevice;
MyDevice = new TWinSerialDevice();
qDebug() << "= Defaults parameters =" ; qDebug() << "Device name : " << MyDevice->deviceName() ; qDebug() << "Baud rate : " << MyDevice->baudRate() ; qDebug() << "Data bits : " << MyDevice->dataBits() ; qDebug() << "Parity : " << MyDevice->parity() ; qDebug() << "Stop bits : " << MyDevice->stopBits() ; qDebug() << "Flow : " << MyDevice->flowControl() ; qDebug() << "Char timeout, msec : " << MyDevice->charIntervalTimeout() ; // MyDevice->setDeviceName("COM1") ; MyDevice->open(QIODevice::ReadOnly | QIODevice::Unbuffered); QString br="115200 baud"; MyDevice->setBaudRate(br) ; // <==== тут строка 32 MyDevice->setDataBits("7 bit") ; MyDevice->setParity("Even") ; MyDevice->setStopBits("2") ; MyDevice->setFlowControl("Hardware") ; MyDevice->setCharIntervalTimeout(100) ; // qDebug() << "= New parameters =" ; qDebug() << "Device name : " << MyDevice->deviceName() ; qDebug() << "Baud rate : " << MyDevice->baudRate() ; qDebug() << "Data bits : " << MyDevice->dataBits() ; qDebug() << "Parity : " << MyDevice->parity() ; qDebug() << "Stop bits : " << MyDevice->stopBits() ; qDebug() << "Flow : " << MyDevice->flowControl() ; qDebug() << "Char timeout, msec : " << MyDevice->charIntervalTimeout() ; MyDevice->close();
return app.exec(); }
Название: Re: overload функции и наследование
Отправлено: roman.ks от Июнь 11, 2009, 14:47
class TWinSerialDevice : public TBaseSerialDevice { .... bool setBaudRate(TBaudRate baudRate); {//тут уже другая реализация нежели в TBaseSerialDevice т.е я переопределяю эту виртуальную ф-ю } .... } Область видимости setBaudRate public ?
Название: Re: overload функции и наследование
Отправлено: kuzulis от Июнь 11, 2009, 14:49
:) да, public
Название: Re: overload функции и наследование
Отправлено: spirit от Июнь 11, 2009, 14:52
не в тему конечно, но кто будет удалять MyDevice? :)
Название: Re: overload функции и наследование
Отправлено: kuzulis от Июнь 11, 2009, 14:54
не в тему конечно, но кто будет удалять MyDevice? Улыбающийся а если в тему? Местные ГУРУ обращают не на то внимание свое!!! :)
Название: Re: overload функции и наследование
Отправлено: roman.ks от Июнь 11, 2009, 14:57
bool setBaudRate(TBaudRate baudRate <----! );
а передаете строку!
Название: Re: overload функции и наследование
Отправлено: roman.ks от Июнь 11, 2009, 14:58
ой, все, ерунду несу
Название: Re: overload функции и наследование
Отправлено: roman.ks от Июнь 11, 2009, 15:00
А что за компилятор?
Название: Re: overload функции и наследование
Отправлено: kuzulis от Июнь 11, 2009, 15:01
minGW
Название: Re: overload функции и наследование
Отправлено: roman.ks от Июнь 11, 2009, 15:07
А если попробовать заменить TWinSerialDevice *MyDevice; на TBaseSerialDevice *MyDevice;
При условии, что ниже не вызываются специфичные для TWinSerialDevice методы. Скомпилируется?
Название: Re: overload функции и наследование
Отправлено: sermp от Июнь 11, 2009, 15:19
Если я ничего не путаю, то объявление bool TWinSerialDevice::setBaudRate(TBaudRate baudRate); перекрывает все определения setBaudRate класса TBaseSerialDevice. Т.е. если Вы хотите, чтобы в классе TWinSerialDevice был метод bool setBaudRate(const QString &baudRate), то Вам придётся её переписать для этого класса.
к сожалению, не могу сейчас дать пруф-линк и надеюсь, что я ничего не напутал.
Название: Re: overload функции и наследование
Отправлено: Alex Custov от Июнь 11, 2009, 16:49
http://groups.google.com/group/comp.lang.c++.moderated/browse_thread/thread/575631e6ba581ee6/d4e4c36db398d560?hl=ru&q=overloading+overriding+hiding твой случай это hiding, когда метода с другой сигнатурой в наследнике прячет метод базового класса. Вызывать надо явно указав область видимости: C++ (Qt) MyDevice->TBaseSerialDevice::setBaudRate(br);
Название: Re: overload функции и наследование
Отправлено: Barmaglodd от Июнь 13, 2009, 14:18
http://groups.google.com/group/comp.lang.c++.moderated/browse_thread/thread/575631e6ba581ee6/d4e4c36db398d560?hl=ru&q=overloading+overriding+hiding твой случай это hiding, когда метода с другой сигнатурой в наследнике прячет метод базового класса. Вызывать надо явно указав область видимости: C++ (Qt) MyDevice->TBaseSerialDevice::setBaudRate(br);
Это не то, внимательнее почитайте свою ссылку и код в первом посте. У kuzulis'а всё в public лежит. @kuzulis: Давай весь код TWinSerialDevice и TBaseSerialDevice и полный текст ошибки компилятора.
Название: Re: overload функции и наследование
Отправлено: kuzulis от Июнь 15, 2009, 07:15
@kuzulis: Давай весь код TWinSerialDevice и TBaseSerialDevice и полный текст ошибки компилятора. вот прицепил архив со всеми файлами :) .. поможите люди добрые! в архиве: - каталог src является библиотекой, она компилится без ошибок! - каталог \examples\default\ является тестовой аппликушкой, в которой я проверяю работу библиотеки.. и вот в этой аппликушки и идут ошибки вот вывод компилятора: D:\projects\QSerialDevice_11062009_1700\examples\default>qmake default.pro
D:\projects\QSerialDevice_11062009_1700\examples\default>make g++ -c -O2 -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -D_TTY_WIN_ -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_THREA D_SUPPORT -I"D:/Qt/4.1.1/include/QtCore" -I"D:/Qt/4.1.1/include" -I"..\..\src" -I"D:/Qt/4.1.1/includ e/ActiveQt" -I"build\moc" -I"D:/Qt/4.1.1/mkspecs/win32-g++" -o build\obj\main.o main.cpp main.cpp: In function `int main(int, char**)': main.cpp:32: error: no matching function for call to `TWinSerialDevice::setBaudRate(QString&)' ../../src/winserialdevice.h:18: note: candidates are: virtual bool TWinSerialDevice::setBaudRate(TBa seSerialDevice::TBaudRate) main.cpp:33: error: no matching function for call to `TWinSerialDevice::setDataBits(const char[6])' ../../src/winserialdevice.h:19: note: candidates are: virtual bool TWinSerialDevice::setDataBits(TBa seSerialDevice::TDataBits) main.cpp:34: error: no matching function for call to `TWinSerialDevice::setParity(const char[5])' ../../src/winserialdevice.h:20: note: candidates are: virtual bool TWinSerialDevice::setParity(TBase SerialDevice::TParity) main.cpp:35: error: no matching function for call to `TWinSerialDevice::setStopBits(const char[2])' ../../src/winserialdevice.h:21: note: candidates are: virtual bool TWinSerialDevice::setStopBits(TBa seSerialDevice::TStopBits) main.cpp:36: error: no matching function for call to `TWinSerialDevice::setFlowControl(const char[9] )' ../../src/winserialdevice.h:22: note: candidates are: virtual bool TWinSerialDevice::setFlowControl( TBaseSerialDevice::TFlow) mingw32-make: *** [build\obj\main.o] Error 1
D:\projects\QSerialDevice_11062009_1700\examples\default>
Название: Re: overload функции и наследование
Отправлено: kuzulis от Июнь 15, 2009, 07:19
упс.. а как прицепить файл?
в "дополнительных опциях" нет возможности прицепить ничего! :(
вот сюда положил архив: http://www.prog.org.ru/topic_9537_15.html
см. самый конец поста , файл QSerialDevice_11062009_1700.zip (51.3 Кб)
Название: Re: overload функции и наследование
Отправлено: mugabe от Июнь 15, 2009, 10:17
Это не то, внимательнее почитайте свою ссылку и код в первом посте. У kuzulis'а всё в public лежит.
@kuzulis: Давай весь код TWinSerialDevice и TBaseSerialDevice и полный текст ошибки компилятора.
AX прав, это именно то. kuzulis, либо прислушайся к AX, либо переменуй setBaudRate который принимает строку в качестве параметра
Название: Re: overload функции и наследование
Отправлено: kuzulis от Июнь 15, 2009, 11:33
Всем спасибо, я просто переименую функцию и всё! :)
Название: Re: overload функции и наследование
Отправлено: Barmaglodd от Июнь 15, 2009, 11:59
Я не прав. Можно либо, как AX сказал, по имени вызывать, либо в TWinSerialDevice добавить using TBaseSerialDevice::setBaudRate;, если MinGW using поддерживает.
Название: Re: overload функции и наследование
Отправлено: Авварон от Июнь 15, 2009, 19:22
вообще это известная фича, указанная в стандарте с++ class A { void f(int); } class B : public A {void f(void);} B b; b.f(10); //ошибка! b.A::f(10); //вот так верно (вроде - проверять лень)
Название: Re: overload функции и наследование
Отправлено: break от Июнь 16, 2009, 02:41
Авварон, в вашем примере сигнатуры функций отличаются параметрами, в примере автора как я понял этих отличий нет class TBaseSerialDevice : public QIODevice { ... public: .... virtual bool setBaudRate(TBaudRate baudRate=BaudRate9600) }
class TWinSerialDevice : public TBaseSerialDevice { .... bool setBaudRate(TBaudRate baudRate); {//тут уже другая реализация нежели в TBaseSerialDevice т.е я переопределяю эту виртуальную ф-ю } .... } Но отличаются функции параметрами по умолчанию - точнее в наследнике он не указан, я к сожалению не в курсе является ли параметр по умолчанию частью сигнатуры функции? Я бы вообще написал так class TBaseSerialDevice : public QIODevice { ... public: .... virtual bool setBaudRate(TBaudRate baudRate=BaudRate9600) }
class TWinSerialDevice : public TBaseSerialDevice { .... virtual bool setBaudRate(TBaudRate baudRate=BaudRate9600) .... } Хоть virtual указывать не обязательно - но это не оставит сомнений для кого-то кто будет разбирать код что функция виртуальная, а вот на счет параметра по умолчанию - мы можем указать его дургим, но с этим связан интересный подвох -- предлагю всем проверить себя http://habrahabr.ru/blogs/cpp/53576/ а вот если параметр по умолчанию убрать - может это уже совсем другая функция (прошу гуру C++ дать ответ) К сожалению у меня не компилируется скачанный пример и в другом месте, так бы с удовольствием поразбирался сам.. полный вывод ошибки компиляции Running build steps for project project... Creating gdb macros library... Starting: /usr/local/qtsdk-2009.01/qt/bin/qmake /home/bboy/Templates/111/QSerialDevice_11062009_1700/project.pro -spec linux-g++ -r Reading /home/bboy/Templates/111/QSerialDevice_11062009_1700/src/src.pro Reading /home/bboy/Templates/111/QSerialDevice_11062009_1700/examples/reader/reader.pro Reading /home/bboy/Templates/111/QSerialDevice_11062009_1700/examples/writer/writer.pro Exited with code 0. Starting: /usr/bin/make -w make: Entering directory `/home/bboy/Templates/111/QSerialDevice_11062009_1700' cd src/ && /usr/bin/make -f Makefile make[1]: Entering directory `/home/bboy/Templates/111/QSerialDevice_11062009_1700/src' g++ -c -pipe -O2 -fPIC -D_REENTRANT -Wall -W -D_TTY_POSIX_ -DQT_NO_DEBUG -DQT_CORE_LIB -I/usr/local/qtsdk-2009.01/qt/mkspecs/linux-g++ -I. -I/usr/local/qtsdk-2009.01/qt/include/QtCore -I/usr/local/qtsdk-2009.01/qt/include -Ibuild/moc -o build/obj/posixserialdevice.o posixserialdevice.cpp posixserialdevice.cpp: In member function ‘virtual bool TPosixSerialDevice::open(QFlags<QIODevice::OpenModeFlag>)’: posixserialdevice.cpp:104: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:134: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘deviceName’ posixserialdevice.cpp:138: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:145: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:155: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:309: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘baudRate’ posixserialdevice.cpp:310: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘dataBits’ posixserialdevice.cpp:311: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘parity’ posixserialdevice.cpp:312: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘stopBits’ posixserialdevice.cpp:313: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘flowControl’ posixserialdevice.cpp:314: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘charIntervalTimeout’ posixserialdevice.cpp:317: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:323: error: ‘errors’ was not declared in this scope posixserialdevice.cpp: In member function ‘virtual void TPosixSerialDevice::close()’: posixserialdevice.cpp:348: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:352: error: ‘errors’ was not declared in this scope posixserialdevice.cpp: In member function ‘virtual bool TPosixSerialDevice::setBaudRate(TBaseSerialDevice::TBaudRate)’: posixserialdevice.cpp:403: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘baudRate’ posixserialdevice.cpp:406: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘baudRate’ posixserialdevice.cpp:409: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘baudRate’ posixserialdevice.cpp:413: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘baudRate’ posixserialdevice.cpp:420: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘baudRate’ posixserialdevice.cpp:423: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘baudRate’ posixserialdevice.cpp:562: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:568: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:572: error: ‘errors’ was not declared in this scope posixserialdevice.cpp: In member function ‘virtual bool TPosixSerialDevice::setDataBits(TBaseSerialDevice::TDataBits)’: posixserialdevice.cpp:613: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘dataBits’ posixserialdevice.cpp:615: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘stopBits’ posixserialdevice.cpp:616: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘stopBits’ posixserialdevice.cpp:617: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘parity’ posixserialdevice.cpp:620: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘dataBits’ posixserialdevice.cpp:627: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘stopBits’ posixserialdevice.cpp:631: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘dataBits’ posixserialdevice.cpp:638: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘stopBits’ posixserialdevice.cpp:642: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘dataBits’ posixserialdevice.cpp:649: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘stopBits’ posixserialdevice.cpp:653: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘dataBits’ posixserialdevice.cpp:660: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘stopBits’ posixserialdevice.cpp:664: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘dataBits’ posixserialdevice.cpp:674: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:680: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:684: error: ‘errors’ was not declared in this scope posixserialdevice.cpp: In member function ‘virtual bool TPosixSerialDevice::setParity(TBaseSerialDevice::TParity)’: posixserialdevice.cpp:727: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘parity’ posixserialdevice.cpp:728: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘dataBits’ posixserialdevice.cpp:731: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘parity’ posixserialdevice.cpp:738: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘dataBits’ posixserialdevice.cpp:743: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘dataBits’ posixserialdevice.cpp:745: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘dataBits’ posixserialdevice.cpp:749: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘dataBits’ posixserialdevice.cpp:753: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘dataBits’ posixserialdevice.cpp:782: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:788: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:792: error: ‘errors’ was not declared in this scope posixserialdevice.cpp: In member function ‘virtual bool TPosixSerialDevice::setStopBits(TBaseSerialDevice::TStopBits)’: posixserialdevice.cpp:832: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘stopBits’ posixserialdevice.cpp:833: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘dataBits’ posixserialdevice.cpp:835: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘stopBits’ posixserialdevice.cpp:842: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘stopBits’ posixserialdevice.cpp:850: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘dataBits’ posixserialdevice.cpp:854: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘stopBits’ posixserialdevice.cpp:863: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:869: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:873: error: ‘errors’ was not declared in this scope posixserialdevice.cpp: In member function ‘virtual bool TPosixSerialDevice::setFlowControl(TBaseSerialDevice::TFlow)’: posixserialdevice.cpp:908: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘flowControl’ posixserialdevice.cpp:909: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘flowControl’ posixserialdevice.cpp:933: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:939: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:943: error: ‘errors’ was not declared in this scope posixserialdevice.cpp: In member function ‘virtual bool TPosixSerialDevice::setCharIntervalTimeout(int)’: posixserialdevice.cpp:961: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘charIntervalTimeout’ posixserialdevice.cpp:965: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:972: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:978: error: ‘errors’ was not declared in this scope posixserialdevice.cpp: In member function ‘qint64 TPosixSerialDevice::bytesAvailable()’: posixserialdevice.cpp:1004: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:1010: error: ‘errors’ was not declared in this scope posixserialdevice.cpp: In member function ‘virtual bool TPosixSerialDevice::setDtr(bool)’: posixserialdevice.cpp:1036: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:1047: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:1053: error: ‘errors’ was not declared in this scope posixserialdevice.cpp: In member function ‘virtual bool TPosixSerialDevice::setRts(bool)’: posixserialdevice.cpp:1079: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:1090: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:1096: error: ‘errors’ was not declared in this scope posixserialdevice.cpp: In member function ‘virtual ulong TPosixSerialDevice::lineStatus()’: posixserialdevice.cpp:1133: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:1162: error: ‘errors’ was not declared in this scope posixserialdevice.cpp: In member function ‘virtual bool TPosixSerialDevice::waitForReadyRead(int, bool)’: posixserialdevice.cpp:1223: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:1235: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:1246: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:1250: error: ‘errors’ was not declared in this scope posixserialdevice.cpp: In member function ‘virtual bool TPosixSerialDevice::waitForBytesWritten(int)’: posixserialdevice.cpp:1306: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:1316: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:1324: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:1328: error: ‘errors’ was not declared in this scope posixserialdevice.cpp: In member function ‘virtual qint64 TPosixSerialDevice::readData(char*, qint64)’: posixserialdevice.cpp:1362: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:1378: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:1387: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:1394: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:1401: error: ‘class TBaseSerialDevice::TSerialSettings’ has no member named ‘charIntervalTimeout’ posixserialdevice.cpp: In member function ‘virtual qint64 TPosixSerialDevice::writeData(const char*, qint64)’: posixserialdevice.cpp:1433: error: ‘errors’ was not declared in this scope posixserialdevice.cpp:1439: error: ‘errors’ was not declared in this scope make[1]: Leaving directory `/home/bboy/Templates/111/QSerialDevice_11062009_1700/src' make[1]: *** [build/obj/posixserialdevice.o] Error 1 make: Leaving directory `/home/bboy/Templates/111/QSerialDevice_11062009_1700' make: *** [sub-src-make_default-ordered] Error 2 Exited with code 2. Error while building project project When executing build step 'Make'
Название: Re: overload функции и наследование
Отправлено: kuzulis от Июнь 16, 2009, 08:11
2 break ,
под *.nix yне будет собираться :) .. та версия еще не отлажена была.. собирается только из под Windows :) ... Попожжа кину исправленый вариант :)
(если кому нужно буит)
Название: Re: overload функции и наследование
Отправлено: kuzulis от Июнь 16, 2009, 08:14
Да и я не стал "парится" над этой проблемой - а просто переименовал все ф-ции : ... virtual bool setBaudRate(TBaudRate baudRate=BaudRate9600) ...
на : ... virtual bool m_setBaudRate(TBaudRate baudRate=BaudRate9600) ...
и перенес их в раздел protected
Название: Re: overload функции и наследование
Отправлено: kuzulis от Июнь 16, 2009, 08:51
2 Авварон,
Вы наверное правы... я только что вычитал в книжке : "ООП на с++" А. Пол. И по-моему в таких случаях ничего сделать нельзя и только 2 выхода: 1. Либо переименовать 2. Либо вызывать "через ..." - что не есть гут! :)
Название: Re: overload функции и наследование
Отправлено: Авварон от Июнь 16, 2009, 09:54
нужно явное указание области видимости. Вообще в с++ это сделано тк предполагалось использование множественных перегрузок => страуструп "позаботился" о производительности компилятора. Сюда же ограничение на приведение автоматическое типов в операторах (компилятор перебирает только варианты, имеющие глубину 2 - 1 пользовательское приведение и 1 стандартное, если не вру)
|