[C++] Include sur fichier source et header
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

[C++] Include sur fichier source et header



  1. #1
    invite3d53f3c2

    [C++] Include sur fichier source et header


    ------

    Bonjour,
    Je sèche sur un point sur un projet en C++.
    Je souhaite faire un client socket et j'ai besoin d'avoir accès a ma variable SOCKET d'un peut partout. Sauf que impossible de la déclarer dans l'header car l'include de winsock2 ce fait dans le CPP. Et si je viens a mettre l'include de winsock2 dans l'header je peut déclarer la variable mais j'ai plein d'erreur...

    Comment je devrait mettre mes include pour me permettre de déclarer ma variable en public dans mon header ?
    Par ailleurs c'est une variable static.

    Merci pour votre aide.

    -----

  2. #2
    pm42

    Re : [C++] Include sur fichier source et header

    Sans ton code ni les messages d'erreur, c'est difficile de t'aider.

    Une possibilité est que tu déclares vraiment ta variable dans ton header et ce n'est pas ce qu'il faut faire : elle doit être indiquée comme "extern" dans le header pour que les différents fichiers .cpp sachent qu'elle existe et son type.
    Mais déclarée réellement dans un .cpp unique.

    Il faudrait aussi savoir si on header est bien écrit avec des #ifndef pour empêcher son inclusion multiple, etc.

  3. #3
    invite3d53f3c2

    Re : [C++] Include sur fichier source et header

    TCPClient.h
    Code:
    #pragma once
    #define WIN32_LEAN_AND_MEAN
    #define DEFAULT_BUFLEN 512
    #define DEFAULT_PORT "27015"
    
    
    namespace gAPI
    {
    	
    	class Networking
    	{		
    	public:
    		Networking();
    		~Networking();
    		static int ConnectClient();			
    		static void SocketThread();	
    	private:
    	};
    
    	
    }
    TCPClient.cpp
    Code:
    #include "TCPClient.h"
    #include <windows.h>
    #include <WinSock2.h>
    #include <ws2tcpip.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <thread>  
    
    #pragma comment (lib, "Ws2_32.lib")
    #pragma comment (lib, "Mswsock.lib")
    #pragma comment (lib, "AdvApi32.lib")
    
    //SOCKET Networking::ConnectSocket = INVALID_SOCKET;
    
    static SOCKET ConnectSocket;
    
    
    using namespace gAPI;
    
    
    void Networking::SocketThread()
    {
        printf("Thread started");
        char recvbuf[DEFAULT_BUFLEN];
        int iResult;
        int recvbuflen = DEFAULT_BUFLEN;
        do {
    
            iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
            if (iResult > 0)
            {
                printf("Bytes received: %d\n", iResult);
                printf(recvbuf);
            }
            else if (iResult == 0)
                printf("Connection closed\n");
            else
                printf("recv failed with error: %d\n", WSAGetLastError());
    
        } while (iResult > 0);
    
    }
    
    int Networking::ConnectClient()
    {
        WSADATA wsaData;
        ConnectSocket = INVALID_SOCKET;
        struct addrinfo* result = NULL,
            * ptr = NULL,
            hints;
        const char* sendbuf = "this is a test";
        char recvbuf[DEFAULT_BUFLEN];
        int iResult;
        int recvbuflen = DEFAULT_BUFLEN;
    
    
    
        // Initialize Winsock
        iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
        if (iResult != 0) {
            printf("WSAStartup failed with error: %d\n", iResult);
            return 1;
        }
    
        ZeroMemory(&hints, sizeof(hints));
        hints.ai_family = AF_UNSPEC;
        hints.ai_socktype = SOCK_STREAM;
        hints.ai_protocol = IPPROTO_TCP;
    
        // Resolve the server address and port
        iResult = getaddrinfo("10.0.0.6", DEFAULT_PORT, &hints, &result);
        if (iResult != 0) {
            printf("getaddrinfo failed with error: %d\n", iResult);
            WSACleanup();
            return 1;
        }
    
        // Attempt to connect to an address until one succeeds
        for (ptr = result; ptr != NULL; ptr = ptr->ai_next) {
    
            // Create a SOCKET for connecting to server
            ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype,
                ptr->ai_protocol);
            if (ConnectSocket == INVALID_SOCKET) {
                printf("socket failed with error: %ld\n", WSAGetLastError());
                WSACleanup();
                return 1;
            }
    
            // Connect to server.
            iResult = connect(ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen);
            if (iResult == SOCKET_ERROR) {
                closesocket(ConnectSocket);
                ConnectSocket = INVALID_SOCKET;
                continue;
            }
            break;
        }
    
        freeaddrinfo(result);
    
        if (ConnectSocket == INVALID_SOCKET) {
            printf("Unable to connect to server!\n");
            WSACleanup();
            return 1;
        }
    
        // Send an initial buffer
        iResult = send(ConnectSocket, sendbuf, (int)strlen(sendbuf), 0);
        if (iResult == SOCKET_ERROR) {
            printf("send failed with error: %d\n", WSAGetLastError());
            closesocket(ConnectSocket);
            WSACleanup();
            return 1;
        }
    
        printf("Bytes Sent: %ld\n", iResult);
    
        //// shutdown the connection since no more data will be sent
        //iResult = shutdown(ConnectSocket, SD_SEND);
        //if (iResult == SOCKET_ERROR) {
        //    printf("shutdown failed with error: %d\n", WSAGetLastError());
        //    closesocket(ConnectSocket);
        //    WSACleanup();
        //    return 1;
        //}
    
        // Receive until the peer closes the connection
      
        std::thread thread_object(&SocketThread);
        
        // // cleanup
        //closesocket(ConnectSocket);
        //WSACleanup();
        //thread_object.join();
        while (1)
        {
            Sleep(100000);
        }
        return 0;
    }
    
    
    Networking::Networking()
    {
    }
    
    Networking::~Networking()
    {
    }
    Bon ne jugez pas le code c'est un peut bâcler sur certain point mais sa fonctionne .



    Et voici les erreur que j'ai en déplacant l'include de winsock2 sur mon header.
    Pastebin

    Et aussi sur le CPP ou j'ai mon main voici mes include :
    Code:
    #include "FileReplacer.h"
    #include "SysInfo.h"
    #include <string>
    #include <sstream>
    #include <Shlwapi.h>
    #include "TCPClient.h"
    #include <thread>
    #include <filesystem>
    #include <iostream>

  4. #4
    pm42

    Re : [C++] Include sur fichier source et header

    Effectivement, ton code semble correct. Je me demande si ce n'est pas un problème d'ordre entre windows.h et WinSock2.h. Ce n'est pas mon domaine d'expertise et en plus, j'ai du mal avec les messages d'erreur en français, cela me donne l'impression de lire un langue étrangère

    Tu auras sans doute quelqu'un qui connait le développement pur Windows pour te répondre plus précisément.

  5. A voir en vidéo sur Futura
  6. #5
    invite44510b00

    Re : [C++] Include sur fichier source et header

    Ca remonte a très très loin mais essayez de modifier l ordre des include.

  7. #6
    pm42

    Re : [C++] Include sur fichier source et header

    Citation Envoyé par Fustigator Voir le message
    Ca remonte a très très loin mais essayez de modifier l ordre des include.
    Ou de mettre windows.h devant winsock2.h dans le header comme il est dans le .cpp.

    Si ça compile dans cet ordre dans le .cpp, cela devrait aussi passer dans le .h

  8. #7
    albanxiii
    Modérateur

    Re : [C++] Include sur fichier source et header

    En tout état de cause, je mettrais les #include "" après les #include <>.
    Not only is it not right, it's not even wrong!

  9. #8
    invite3d53f3c2

    Re : [C++] Include sur fichier source et header

    J'ai essayer un peut tout ce que vous m'avez proposer (Inverser les ordre etc). En revanche cette reponse ma fait penser a quelque chose que j'ai vue sur internet.

    Citation Envoyé par pm42 Voir le message
    Effectivement, ton code semble correct. Je me demande si ce n'est pas un problème d'ordre entre windows.h et WinSock2.h. Ce n'est pas mon domaine d'expertise et en plus, j'ai du mal avec les messages d'erreur en français, cela me donne l'impression de lire un langue étrangère


    Comme quoi il on ne peut pas mettre windows.h avec winsock2.h.
    J'ai donc essayer de mettre le windows.h dans le header et retirer le winsock2.h. Et la magie sa fonctionne... Le windows.h doit sans doute deja importer le winsock2. Du coup j'ai fait ceci. Dite moi ce que vous en pensez :


    Tu auras sans doute quelqu'un qui connait le développement pur Windows pour te répondre plus précisément.
    Du coup j'ai modifier de cette façon et sa fonctionne. Qu'en pensez vous ?

    Code:
    #define _WINSOCKAPI_
    #ifdef _WINSOCK2API_
    #include <WinSock2.h>
    #endif
    
    #include <windows.h>
    Edit : Erreur de ma part sa ne fonctionne toujours pas car winsock2 ne s'include pas du coup sa ne trouve pas la reference SOCKET ... sur l'header

  10. #9
    pm42

    Re : [C++] Include sur fichier source et header

    Tu as mis ça où ? Dans ton .h ou ton .cpp ?

    Je me demande si tu ne devrait pas mettre dans ton TCPClient.h au début

    #ifndef _TCP_CLIENT_H_
    #define _TCT_CLIENT_H_

    et le #endif à la fin et voir ce qui se passe.
    De toute manière, c'est la norme pour éviter d'inclure le contenu d'un .h plusieurs fois.

  11. #10
    invite3d53f3c2

    Re : [C++] Include sur fichier source et header

    J'ai oublier de préciser. Ce que j'ai poster et bien dans le h.
    Après c'est vraiment nécessaire de mettre ifdef tcp_client ? Parceque je croit que pragma_once sert justement a éviter d’inclure plusieurs fois le fichier.

    Meme en l'ayant mit toujours rien lorsque je met le ws2tcpip dans l'header.

    Une partie des erreur :

    Code:
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\ws2def.h(103,1): warning C4005: 'AF_IPX'*: redéfinition de macro
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(457): message : voir la définition précédente de 'AF_IPX'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\ws2def.h(147,1): warning C4005: 'AF_MAX'*: redéfinition de macro
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(476): message : voir la définition précédente de 'AF_MAX'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\ws2def.h(185,1): warning C4005: 'SO_DONTLINGER'*: redéfinition de macro
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(399): message : voir la définition précédente de 'SO_DONTLINGER'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\ws2def.h(238,25): error C2011: 'sockaddr'*: redéfinition du type 'struct'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(1007): message : voir la déclaration de 'sockaddr'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\ws2def.h(440,5): error C2143: erreur de syntaxe*: absence de '}' avant 'constante'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\ws2def.h(440,27): error C2059: erreur de syntaxe*: 'constante'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\ws2def.h(494,1): error C2143: erreur de syntaxe*: absence de ';' avant '}'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\ws2def.h(494,10): error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\ws2def.h(494,20): error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\ws2def.h(575,1): warning C4005: 'IN_CLASSA'*: redéfinition de macro
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(284): message : voir la définition précédente de 'IN_CLASSA'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\ws2def.h(581,1): warning C4005: 'IN_CLASSB'*: redéfinition de macro
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(290): message : voir la définition précédente de 'IN_CLASSB'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\ws2def.h(587,1): warning C4005: 'IN_CLASSC'*: redéfinition de macro
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(296): message : voir la définition précédente de 'IN_CLASSC'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\ws2def.h(598,1): warning C4005: 'INADDR_ANY'*: redéfinition de macro
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(301): message : voir la définition précédente de 'INADDR_ANY'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\ws2def.h(600,1): warning C4005: 'INADDR_BROADCAST'*: redéfinition de macro
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(303): message : voir la définition précédente de 'INADDR_BROADCAST'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\ws2def.h(636,28): error C2011: 'sockaddr_in'*: redéfinition du type 'struct'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(1011): message : voir la déclaration de 'sockaddr_in'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(136,23): error C2011: 'fd_set'*: redéfinition du type 'struct'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(1019): message : voir la déclaration de 'fd_set'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(156,1): warning C4005: 'FD_CLR'*: redéfinition de macro
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(94): message : voir la définition précédente de 'FD_CLR'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(171,1): warning C4005: 'FD_SET'*: redéfinition de macro
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(99): message : voir la définition précédente de 'FD_SET'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(180,16): error C2011: 'timeval'*: redéfinition du type 'struct'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(1035): message : voir la déclaration de 'timeval'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(236,17): error C2011: 'hostent'*: redéfinition du type 'struct'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(1023): message : voir la déclaration de 'hostent'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(249,16): error C2011: 'netent'*: redéfinition du type 'struct'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(177): message : voir la déclaration de 'netent'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(256,17): error C2011: 'servent'*: redéfinition du type 'struct'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(1027): message : voir la déclaration de 'servent'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(268,18): error C2011: 'protoent'*: redéfinition du type 'struct'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(1031): message : voir la déclaration de 'protoent'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(364,24): error C2011: 'WSAData'*: redéfinition du type 'struct'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(319): message : voir la déclaration de 'WSAData'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(462,18): error C2011: 'sockproto'*: redéfinition du type 'struct'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(491): message : voir la déclaration de 'sockproto'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(504,16): error C2011: 'linger'*: redéfinition du type 'struct'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(1015): message : voir la déclaration de 'linger'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(517,1): warning C4005: 'SOMAXCONN'*: redéfinition de macro
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(541): message : voir la définition précédente de 'SOMAXCONN'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(552,1): warning C4005: 'FD_READ'*: redéfinition de macro
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(559): message : voir la définition précédente de 'FD_READ'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(555,1): warning C4005: 'FD_WRITE'*: redéfinition de macro
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(560): message : voir la définition précédente de 'FD_WRITE'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(558,1): warning C4005: 'FD_OOB'*: redéfinition de macro
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(561): message : voir la définition précédente de 'FD_OOB'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(561,1): warning C4005: 'FD_ACCEPT'*: redéfinition de macro
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(562): message : voir la définition précédente de 'FD_ACCEPT'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(564,1): warning C4005: 'FD_CONNECT'*: redéfinition de macro
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(563): message : voir la définition précédente de 'FD_CONNECT'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(567,1): warning C4005: 'FD_CLOSE'*: redéfinition de macro
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(564): message : voir la définition précédente de 'FD_CLOSE'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(1625,1): error C2375: 'accept'*: redéfinition*; liaison différente
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(739): message : voir la déclaration de 'accept'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(1647,1): error C2375: 'bind'*: redéfinition*; liaison différente
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(744): message : voir la déclaration de 'bind'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(1668,1): error C2375: 'closesocket'*: redéfinition*; liaison différente
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(749): message : voir la déclaration de 'closesocket'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(1685,1): error C2375: 'connect'*: redéfinition*; liaison différente
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(751): message : voir la déclaration de 'connect'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(1706,1): error C2375: 'ioctlsocket'*: redéfinition*; liaison différente
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(756): message : voir la déclaration de 'ioctlsocket'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(1729,1): error C2375: 'getpeername'*: redéfinition*; liaison différente
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(761): message : voir la déclaration de 'getpeername'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(1750,1): error C2375: 'getsockname'*: redéfinition*; liaison différente
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(766): message : voir la déclaration de 'getsockname'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(1771,1): error C2375: 'getsockopt'*: redéfinition*; liaison différente
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(771): message : voir la déclaration de 'getsockopt'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(1796,1): error C2375: 'htonl'*: redéfinition*; liaison différente
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(778): message : voir la déclaration de 'htonl'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(1813,1): error C2375: 'htons'*: redéfinition*; liaison différente
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(780): message : voir la déclaration de 'htons'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(1831,1): error C2375: 'inet_addr'*: redéfinition*; liaison différente
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(782): message : voir la déclaration de 'inet_addr'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(1849,1): error C2375: 'inet_ntoa'*: redéfinition*; liaison différente
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(784): message : voir la déclaration de 'inet_ntoa'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(1949,1): error C2375: 'listen'*: redéfinition*; liaison différente
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(786): message : voir la déclaration de 'listen'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(1968,1): error C2375: 'ntohl'*: redéfinition*; liaison différente
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(790): message : voir la déclaration de 'ntohl'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(1985,1): error C2375: 'ntohs'*: redéfinition*; liaison différente
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(792): message : voir la déclaration de 'ntohs'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(2002,1): error C2375: 'recv'*: redéfinition*; liaison différente
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(794): message : voir la déclaration de 'recv'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(2025,1): error C2375: 'recvfrom'*: redéfinition*; liaison différente
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(800): message : voir la déclaration de 'recvfrom'
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock2.h(2052,1): error C2375: 'select'*: redéfinition*; liaison différente
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winsock.h(808): message : voir la déclaration de 'select'

  12. #11
    invite44510b00

    Re : [C++] Include sur fichier source et header

    Citation Envoyé par pm42 Voir le message
    Tu as mis ça où ? Dans ton .h ou ton .cpp ?

    Je me demande si tu ne devrait pas mettre dans ton TCPClient.h au début

    #ifndef _TCP_CLIENT_H_
    #define _TCT_CLIENT_H_

    et le #endif à la fin et voir ce qui se passe.
    De toute manière, c'est la norme pour éviter d'inclure le contenu d'un .h plusieurs fois.
    C'est exactement ce que fait la directive #pragma once, si toutefois elle est bien supportée par le compilo utilisé.

  13. #12
    invite44510b00

    Re : [C++] Include sur fichier source et header

    Quelques éléments de réponse là :
    https://stackoverflow.com/questions/...and-winsock2-h

    et notamment ça :
    windows.h includes winsock2.h


    par ailleurs si tu mets winsock2.h pourquoi mettre winsock.h ? (destiné aux anciennes version de windows).

    Dans tous les cas de figures faire le ménage dans tes includes.

  14. #13
    Jack
    Modérateur

    Re : [C++] Include sur fichier source et header

    Citation Envoyé par Fustigator Voir le message
    C'est exactement ce que fait la directive #pragma once, si toutefois elle est bien supportée par le compilo utilisé.
    Exact, il faut en principe un compilateur de microsoft.

  15. #14
    pm42

    Re : [C++] Include sur fichier source et header

    Citation Envoyé par Fustigator Voir le message
    C'est exactement ce que fait la directive #pragma once, si toutefois elle est bien supportée par le compilo utilisé.
    Au temps pour moi. Comme je disais, je ne suis pas spécialiste de l'environnement Windows et j'ai des vieux réflexes de code aussi portable que possible.

  16. #15
    invite44510b00

    Re : [C++] Include sur fichier source et header

    Citation Envoyé par Jack Voir le message
    Exact, il faut en principe un compilateur de microsoft.
    Pas que; si on en croit cette fiche Wikipedia, la liste des compilateurs la supportant est assez longue :
    https://en.wikipedia.org/wiki/Pragma_once#Portability

    En plus, il y a au dessus quelques remarques sur l'aspect non trivial de son implémentation.

  17. #16
    Jack
    Modérateur

    Re : [C++] Include sur fichier source et header

    Oui, tu as raison.
    Perso, je remplace systématiquement le #pragma once par une condition de garde plus standard.

  18. #17
    invite3d53f3c2

    Re : [C++] Include sur fichier source et header

    Je reviens avec du retard je n'est pas trop eu le temps ses dernier jour de m'en occuper.

    Citation Envoyé par Fustigator Voir le message
    Quelques éléments de réponse là :
    https://stackoverflow.com/questions/...and-winsock2-h

    et notamment ça :


    par ailleurs si tu mets winsock2.h pourquoi mettre winsock.h ? (destiné aux anciennes version de windows).

    Dans tous les cas de figures faire le ménage dans tes includes.
    Je n'est pas importer winsock.h ou que ce soit. Tu le voit ou ?

    Exact, il faut en principe un compilateur de microsoft.
    Je bosse avec visual studio pro 2019. Donc pas de soucis je pense a ce niveau.

Discussions similaires

  1. Fichier source d'un OCR (vb net)
    Par invitefc1d19bc dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 03/08/2016, 20h22
  2. Réponses: 2
    Dernier message: 24/09/2013, 18h08
  3. High tech Picc : Variables entre source et header
    Par invite4205631c dans le forum Électronique
    Réponses: 4
    Dernier message: 20/10/2011, 15h22
  4. Comment rédiger un fichier include sous CCS ?
    Par invite56dfcaf2 dans le forum Électronique
    Réponses: 4
    Dernier message: 12/04/2008, 23h34
  5. amener fichier executif sans fichier source
    Par invite9848a956 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 03/03/2008, 18h55