Ошибка при компиляции c++!

107
24 ноября 2021, 11:40
#include <iostream>
#include "UDPSocket.h"
class Server
{
private:
    UDPSocket* socket;
    std::thread* networkthread;
    int port;
public:
    Server(int port);
    void handlePacket();
};

Не могу понять в чём же дело.

UDPSocket.h
#ifndef _SOCKET_H_
#define _SOCKET_H_
#include <exception>
#include <mutex>
#ifdef __unix__
#   include <errno.h>
#   include <sys/types.h>
#   include <sys/socket.h>
#   include <sys/un.h>
#   include <netinet/in.h>
#   include <netdb.h>
#   include <arpa/inet.h>
#   include <unistd.h>
#define INVALID_SOCKET -1
#else
#   include <winsock2.h>
#   include <Ws2tcpip.h>
#   include <windows.h>
#   ifdef _MSC_VER
#       pragma comment( lib, "Ws2_32.lib")
#   endif
#endif
#define DEFAULT_PORT 19132
#define BUFFER_SIZE 1048 * 2
#include "./BinaryStream.h"
#include "Server.h"
#include <thread>
    class UDPSocket
    {
    private:
        bool isStarted;
#ifdef WIN32
        SOCKET sock;
        WSAData data;
#else
        int sock;
#endif
    public:
        bool isRuning;

    public:
        UDPSocket();
        UDPSocket(short port);
        UDPSocket(std::string ip);
        UDPSocket(std::string ip, short port, Server *server);
        ~UDPSocket();
        bool bind(std::string ip, short port);
        void receive();
        //int send(Packet*);
        void close();
        Server* server;
    };
#endif
Answer 1

Server.h включает UDPSocket.h, который включает Server.h. A Server.h не имеет защиту от многоразового включения и class Server определяется несколько раз подряд. Что бы решить проблему нужно:

  1. Добавить защиту от многоразового включения в Server.h
  2. Не зацикливать файлы (уберите include этих файлов)
  3. Добавить обьявления (не определения) классов (перед классом Server напишите class UDPSocket; , а перед классом UDPSocket напишите class Server;
  4. В файлы реализаций подключать оба файла (и Server.h, и UDPSocket.h)
READ ALSO
Как написать программу, которая выводит прописью введенное число?

Как написать программу, которая выводит прописью введенное число?

Как написать программу, которое выводит прописью введенное число? Например, при вводе числа 999 результатом работы программы должна быть строка...

108
Поиск утечек дескрипторов

Поиск утечек дескрипторов

Есть ли в виндовом CRT средства для поиска незакрытых дескрипторов объектов (файлов, сокетов, процессов и тп

89
Баг при передаче массива Com объекту

Баг при передаче массива Com объекту

В общем я передаю массив структур объекту COM, и вроде бы все успешно происходит, но при запросе кол-ва переданных ему структур, этот объект...

89
Как правильно ограничить поворот gameObject в Unity

Как правильно ограничить поворот gameObject в Unity

У меня есть задача, ограничить движение по вертикали пушки от -20 до 20 градусов, если это значение превышается, то поворачивает платформа на которой...

270