[英]Questions about using smart pointers with winsock's addrinfo struct
[英]Undefined struct 'addrinfo' winsock2
我遇到了一个错误,我没有找到任何解决方案(即使是通过互联网)
我创建了一个Qt
应用程序来使用TCP
协议和 plot 它们使用QcustomPlot
接收数据。
我有以下文件:
主窗口.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;
// ...
};
主窗口.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”使用未定义的结构“addrinfo”(编译源文件 main.cpp)。
我不明白为什么会出现此错误,因为我按照microsoft 教程在经典的 consol 应用程序中测试了相同的程序并且它正在运行。 我相信它来自包含,但我仍然不知道是哪一个导致了这种情况。
您需要在定义struct addrinfo
的#include
中mainwindow.h
一些内容,因为您的MainWindow
class 具有该类型的成员变量。 目前,您仅在*.cpp
文件中包含所有套接字内容。
您使用#define WIN32_LEAN_AND_MEAN
来防止包含许多相关的 header 文件,并使您明确包含所需的 header 文件。 至于addrinfo
你必须#include <ws2def.h>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.