Russian Qt Forum

Программирование => С/C++ => Тема начата: kuzulis от Июнь 11, 2009, 14:24



Название: 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/ &amp;&amp; /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 стандартное, если не вру)