繁体   English   中英

由于多次包含头文件而导致C ++重新定义

[英]C++ redefinition due to including header files multiple times

正如,标题所说。 由于多次包含头文件,我遇到了重定义错误。 我知道它的原因,但我不知道如何解决。 是的,我之前在一小时内发布了相同的问题。 但我无法正确解释(我认为如此),并没有得到预期的答案。 链接在这里:

C ++重定义头文件

我没有编辑那个问题,因为它已被填满:)。

好吧,我有一些类,它们的结构是这样的:

main.cpp中:

#include "Server.h"
#include "Handler.h"
#include "Processor.h"

int main(int argc, char* argv[])
{

}

Server.h:

// Server.h
#pragma once

#include <winsock2.h>

handler.h中:

// Handler.h
#pragma once

#include <string>
#include <vector>

#include "Server.h"

Processor.cpp:

// Processor.cpp

#include "StdAfx.h"
#include "Processor.h"
#include "Handler.h"

Server.cpp:

// Server.cpp

#include "Server.h"
#include "Processor.h"

问题是<winsock2.h>被包含多次,不知道它在哪里。 #pragma曾经有同样的目的

#ifndef SOME_FILE_H
#define SOME_FILE_H
// code here
#endif // SOME_FILE_H

在我的编译器(在这种情况下为MSVC2008)。 所以我非常确定我不需要头部包含警卫。 但你能否发现我在做错误的地方<winsock2.>被包括两次,我该如何解决?

谢谢

在项目设置中:项目属性 - >配置 - >高级 - >显示包含。

它将转储包含树的标题,从那里你将能够看到罪魁祸首。

我最近遇到了同样的问题并在包括windows.h之前解决了包括winsock2.h在内的问题。

在包含stdafx或windows之前,您需要部分或全部这些。

#define _MSWSOCK_
#define NCB_INCLUDED
#define _WINSOCK2API_
#define _WINSOCKAPI_   /* Prevent inclusion of winsock.h in windows.h */

我似乎记得有这个问题。 我认为windows.h和winsock2.h之间存在一个依赖性问题我似乎记得我在winsock2.h之前总是包括windows.h,无论它在哪里使用它。

您是否尝试过我们在您的其他答案中提出的任何建议?

说真的,尝试使用包含保护而不是#pragma once

如果你仍然遇到问题,那么可能会回来并在SO上发布另一个问题。 不要发布有关同一事物的多个问题,因为您不愿意(或无法)接受我们的建议!

尝试更换

#include <winsock2.h>

#ifndef _WINSOCK2API_
#include <winsock2.h>
#endif

由于_WINSOCK2API_是在winsock2.h中定义的,因此编译器不会尝试多次包含它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM