未定义的结构 'addrinfo' winsock2

Undefined struct 'addrinfo' winsock2

我遇到了一个错误,但我没有找到任何解决方案(即使是通过互联网)

我创建了一个Qt应用程序来使用TCP协议接收数据并使用QcustomPlot绘制它们。

我有以下文件:

mainwindow.h :

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_mainwindow.h"
#include <QVector>
#include <iostream>

class MainWindow: public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = Q_NULLPTR);
    // ...

private:
    struct addrinfo _hints;
    struct addrinfo* _result = NULL;
    // ...
};

mainwindow.cpp :

#pragma once
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <stdio.h>

#pragma comment(lib, "ws2_32.lib")

#include "mainwindow.h"
#include <QVector>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    //...
}

main.cpp文件:

#include "mainwindow.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

我有以下错误: 'MainWindow::hints' uses undefined struct 'addrinfo' (编译源文件main.cpp).

我不明白为什么会出现此错误,因为我在 microsoft tutorial 之后的经典控制台应用程序中测试了相同的程序并且它正在运行。 我相信它来自于包含,但我仍然不知道是哪一个导致了它。

您需要 #include 在您的 mainwindow.h 中定义 struct addrinfo 的内容,因为您的 MainWindow class 具有该类型的成员变量。目前,您仅在 *.cpp 文件中包含所有套接字内容。

您使用 #define WIN32_LEAN_AND_MEAN 来防止包含许多依赖的头文件并使您显式包含所需的头文件。至于 addrinfo 你必须 #include <ws2def.h>.