В Qt4 соединение сигналов и слотов происходит при помощи connect.
Если работать только на С++ с сокетами, то есть заголовочные файлы:
Код: Выделить всё
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>при помощи которых можно использовать технологию сокетов.
Технология сокетов используется вот так:
Код: Выделить всё
#include <stdio.h>
#include <iostream>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
using namespace std;
int main(int nArg, char** pArgs)
{
int mySocket = socket(PF_INET, SOCK_STREAM, 0);
struct sockaddr_in serv_address;
serv_address.sin_family = PF_INET;
serv_address.sin_port = htons((u_short)1500);
serv_address.sin_addr.s_addr = inet_addr("127.0.0.1");
int i = connect(mySocket, (struct sockaddr *) &serv_address, sizeof(serv_address));
write(mySocket, "Hello Server!", sizeof("Hello Server!"));
char server_message[100];
read(mySocket, server_message, sizeof(server_message));
cout << server_message << "\n";
close(mySocket);
return 0;
}Это простейший пример, написан клиент, подключающийся на петлю(127.0.0.1) на порт 1500. Вместо указания явного IP в случае использования на своем же компьютере можно использовать просто serv_address.sin_addr.s_addr = 0; но не в этом суть.
Суть в том, что как видите, здесь присутствует int i = connect(....
В Qt4 connect тоже используется.
При компиляции возникает вот такая вот ошибка:
Код: Выделить всё
nik@nik:~/NetBeansProjects/Cpp/ClientServer/simpleChatWithQt> qmake -project
nik@nik:~/NetBeansProjects/Cpp/ClientServer/simpleChatWithQt> qmake
nik@nik:~/NetBeansProjects/Cpp/ClientServer/simpleChatWithQt> make
*******
тут была информация о ходе создания moc файлов итд...
*******
MySocket.cpp: In member function ‘virtual void MySocket::run()’:
MySocket.cpp:35: error: no matching function for call to ‘[b]MySocket::connect(int&, sockaddr*, unsigned int)[/b]’
/usr/include/QtCore/qobject.h:197: note: [b]candidates are: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*, Qt::ConnectionType)[/b]
/usr/include/QtCore/qobject.h:302: note: bool QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const
make: *** [MySocket.o] Ошибка 1
nik@nik:~/NetBeansProjects/Cpp/ClientServer/simpleChatWithQt>Текст самих MySocket.h и MySocket.cpp, мне кажется, не нужно здесь выкладывать, но если потребуется выложу.
Это обычный класс использующий технологию сигналов и слотов Qt4.
Вот и главный вопрос:
Что мне делать?
Как сделать чтобы одна и та же фунция connect из разных библиотек не пересекалась?
Как устранить эту зависимость?
P.S.
я знаю что в Qt4 организованно кроссплатформенная поддержка сокетов, есть встроенные классы Qt4 работающие с сокетами, там всё удобно разложено по полочкам и вылизано до блеска. Но мне необходимо использовать системные библиотеки <sys/types.h>, <sys/socket.h>, <netinet/in.h>, <arpa/inet.h>, т.к. преподаватель задал задание "Сделать простейший чат по технологии сокетов".
Делать консольный чат... 21й век, GUI процветают :-) Поэтому решил делать с использованием Qt4. И если я ему принесу писанное полностью на Qt4... Есть вероятность что он не поймёт Qt4. С другой стороны, если я ему в коде ткну пальцем и покажу где используется стандартные библиотеки, он поймет, увидев знакомые строчки, и поставит всё что мне нужно =)