免责声明:C++ Redefinition Header Files (winsock2.h)没有解决我的问题
在这个项目中,我试图拍摄一个截图,然后用libjpeg-turbo压缩它。问题是我会犯类似的错误
"sockaddr": "struct" Type redefinition和
"nothl": Redefinition工作人员:
#pragma once
#ifndef SCREENWORKER_H
#define SCREENWORKER_H
#include <string>
#include <vector>
#include <thread>
#include <turbojpeg.h>
#include <Windows.h>
#include "..\API\NetClient.h"
class ScreenWorker {
private:
NetClient* client;
public:
int delay = 30;
ScreenWorker(NetClient* client);
HBITMAP GetScreenBmp(HDC hdc);
void Update();
};
#endifScreenWorker.cpp:
#include "ScreenWorker.h"
ScreenWorker::ScreenWorker(NetClient* client) {
this->client = client;
Update();
}
HBITMAP ScreenWorker::GetScreenBmp(HDC hdc) {...}
void ScreenWorker::Update() {...}main.cpp (DLL-条目):
#pragma once
#include "..\..\Base\API\API\GladOSClient.h"
#include "ScreenWorker.h"
using namespace std;
BOOL WINAPI DllMain(HINSTANCE Instance, DWORD Reason, LPVOID Reserved) {
return true;
}H(只有标题部分):
#pragma once
#ifndef NETCLIENT_H
#define NETCLIENT_H
#define _WINSOCKAPI_
#include <Windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <vector>
#include <list>
#include <mutex>
#include <map>
#include <string>
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Mswsock.lib")
#pragma comment (lib, "AdvApi32.lib")
#include "Utils.h"
#include "PacketHandler.h"
#include "Packet.h"
...
#endif正如您所看到的,我在任何地方都使用头部保护,但是我还是会遇到这些错误。似乎包含"Windows.h“有问题吗?
提前感谢!
编辑我猜这个问题与libjpegturbo处理包含"Windows.h“的方式有关。目前我没有解决这个问题的真正方法。也许我试着导出我在独立DLL中需要的函数.希望这能解决这个问题。
发布于 2017-10-08 19:02:13
经典的问题。
只需从NetClient.h中删除这一行
#include <Windows.h>包含<Winsock2.h>将为您引入<windows.h>,并纠正所有这些重新定义的问题。
https://stackoverflow.com/questions/46634912
复制相似问题