簡體   English   中英

類型重新定義錯誤(使用標題保護)

[英]Type Redefinition Error (using Header Guards)

免責聲明: C ++重新定義頭文件(winsock2.h)無法解決我的問題

在此項目中,我嘗試拍攝屏幕截圖,然后使用libjpeg-turbo對其進行壓縮。 問題是我收到類似的錯誤

"sockaddr": "struct" Type redefinition

"nothl": Redefinition

ScreenWorker.h:

#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();
};
#endif

ScreenWorker.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;
}

NetClient.h(僅Header部分):

#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中...希望這可以解決它。

經典問題。

只需從NetClient.h刪除此行

#include <Windows.h>

包含<Winsock2.h >將為您拉入<windows.h>並更正所有這些重新定義的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM