ошибка: ожидаемый конструктор, деструктор или преобразование типа перед '(' токен WSAStartup (versionWanted, & wsaData); - PullRequest
0 голосов
/ 01 февраля 2020
#pragma once

#include <iostream>
#include <string>

#include <cstring>
#include <cstdio>
#include <cstdlib>

#ifdef __linux__
#include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <netdb.h>
    #include <unistd.h>

    #define WSACleanup()
    #define closeConnection(fd) ::close(fd)
#elif _WIN32
    #define WIN32_LEAN_AND_MEAN

    #include <windows.h>
    #include <winsock2.h>
    #include <ws2tcpip.h>
    #include <stdlib.h>
    #include <stdio.h>

    WORD versionWanted = MAKEWORD(1, 1);
    WSADATA wsaData;
    WSAStartup (versionWanted, &wsaData);

    #define closeConnection(fd) closesocket(fd);
#endif
#include <openssl/ssl.h>
using namespace std;
...

компиляция с помощью этой команды:

x86_64-w64-mingw32-g++ main.cpp -I include -o main.exe -lssl -lcrypto -lws2_32 -static

Ошибка компиляции:
<b>error: expected constructor, destructor, or type conversion before ‘(’ token WSAStartup (versionWanted, &wsaData);</b>

Ведущий: Kubuntu 18.04 LTS

Q_1: почему он выдает мне эту ошибку?
Q_2: Должен ли я использовать комментарий ... для ссылок при использовании mingw64 (или только при использовании msv c)?

1 Ответ

1 голос
/ 01 февраля 2020

За исключением инициализаций и объявлений, весь код должен находиться внутри функции или метода. Вам нужно поместить следующий код внутри функции:

WORD versionWanted = MAKEWORD(1, 1);
WSADATA wsaData;
WSAStartup (versionWanted, &wsaData);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...