Название: Как раширить QTcpSocket? Отправлено: Buran от Апрель 28, 2010, 14:35 Здравствуйте.
Мне нужно "расширить" класс QTcpSocket, с добавлением своих переменных, методов, перекрыть пару методов и деструктор. В Socket.cpp определяю класс Socket: Код: class Socket : QTcpSocket(0) В Server.cpp файле пытаюсь сделать: Код: Socket* client = nextPendingConnection(); Код: Server.cpp:25:error: invalid conversion from ‘QTcpSocket*’ to ‘Socket*’ В Java я делал это посредством extends. Возможно-ли здесь нечто подобное? Пасиб, за дельные комменты. Название: Re: Как раширить QTcpSocket? Отправлено: crossly от Апрель 28, 2010, 14:39 простите .... а что сие значит ??
Код: class Socket : QTcpSocket(0) Название: Re: Как раширить QTcpSocket? Отправлено: Amigo_sa от Апрель 28, 2010, 14:40 Код: class Socket : QTcpSocket(0) вы не указали тип наследования, по умолчанию он private, если не ошибаюсь Нужно наследовать так Код: class Socket : public QTcpSocket Название: Re: Как раширить QTcpSocket? Отправлено: Buran от Апрель 28, 2010, 14:47 Звиняйте, когда копипастил из кода - промахнулся.)
Вместо: Код: class Socket : QTcpSocket(0) Читать: Код: class Socket : public QTcpSocket Так что вопрос пока открыт....( Название: Re: Как раширить QTcpSocket? Отправлено: Amigo_sa от Апрель 28, 2010, 14:50 Код: Socket* client = nextPendingConnection(); Код: Server.cpp:25:error: invalid conversion from ‘QTcpSocket*’ to ‘Socket*’ необходимо приведение типа Код: Socket* client = dynamic_cast<Socket*>(nextPendingConnection()); Название: Re: Как раширить QTcpSocket? Отправлено: Buran от Апрель 28, 2010, 14:53 Касты уже пробовал.
Здесь катит, а дальше в коде начинаются траблы. Сейчас смоделирую и скажу где плохо становится. Может мне смотреть не в сторону наследования, а в сторону встраивания с френдом? Название: Re: Как раширить QTcpSocket? Отправлено: garryHotDog от Апрель 28, 2010, 18:38 попробуй
Код: #include <QTcpSocket> а при вызове nextPendingConnection (): Код: CMySocket *pSocket=nextPendingConnection (); Название: Re: Как раширить QTcpSocket? Отправлено: BRE от Апрель 28, 2010, 19:13 Ни какие приведения типов работать не будут. Внутри QTcpServer создается объект класса QTcpSocket, никаким образом его не получиться привести к классу-наследнику CMySocket.
У класса QTcpServer есть виртуальный метод: void QTcpServer::incomingConnection ( int socketDescriptor ) [virtual protected] который вызывается при подключении нового клиента. Если его переопределить, то в нем можно создавать объекты класса CMySocket. Название: Re: Как раширить QTcpSocket? Отправлено: garryHotDog от Апрель 28, 2010, 19:16 предыдущий пост в тему....смотри в примерах "Threaded Fortune Server Example" - и будет тебе счастье ;D
Название: Re: Как раширить QTcpSocket? Отправлено: Buran от Апрель 29, 2010, 11:27 Как я и говорил, косяк в приведении типа есть:
Код: Socket* client = dynamic_cast<Socket*>(nextPendingConnection()); Далее, если попытаться привязать сигнал, то после запуска ругается, что client - null; Наверное, BRE прав. Хотя, если честно, я не понял, почему нельзя привести тип. Разве, что там есть виртуальные методы, которые в моем классе должны быть обязательно переопределены? 2BRE, не намекнете, почему такое приведение невозможно?;) Всем пасиб за дельные советы, пошел читать указанные экзамплы..) Название: Re: Как раширить QTcpSocket? Отправлено: ритт от Май 01, 2010, 19:20 намёк BRE был слишком тонким?))
открой исходник QTcpServer::incomingConnection() - и сразу станет всё понятно /* или не станет */ |