Microsoft MVP성태의 닷넷 이야기
오류 유형: 688. .Visual C++ - Error C2011 'sockaddr': 'struct' type redefinition [링크 복사], [링크+제목 복사],
조회: 19472
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

Visual C++ - Error C2011 'sockaddr': 'struct' type redefinition

다음과 같이 간단한 코드가,

#include "stdafx.h"
#include <windows.h>
#include <winsock2.h>

int main()
{
    int len = sizeof(sockaddr);

    return 0;
}

컴파일하면 무수히 많은 redefinition 오류를 발생시킵니다. 검색해 보면 다음의 글에서 정확한 원인을 짚어내고 있습니다.

C++ Redefinition Header Files (winsock2.h)
; https://stackoverflow.com/questions/1372480/c-redefinition-header-files-winsock2-h

As others suggested, the problem is when windows.h is included before WinSock2.h. Because windows.h includes winsock.h. You can not use both WinSock2.h and winsock.h.


따라서, 다음과 같이 아~~~~주 다양한 해결책이 나옵니다. ^^

1) winsock2.h를 제외하거나,
#include "stdafx.h"

#include <windows.h>
// #include <winsock2.h>

int main()
{
    int len = sizeof(sockaddr);

    return 0;
}

2) windows.h 헤더를 포함하기 전에 _WINSOCKAPI_ 또는 WIN32_LEAN_AND_MEAN 매크로 상수를 등록하거나,
#include "stdafx.h"

#define _WINSOCKAPI_  // #define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winsock2.h>

int main()
{
    int len = sizeof(sockaddr);

    return 0;
}

3) winsock2.h를 먼저 include 하거나!
#include "stdafx.h"

#include <winsock2.h>
#include <windows.h>

int main()
{
    int len = sizeof(sockaddr);

    return 0;
}

예제의 경우에는 단순히 sockaddr를 사용하기 때문에 위의 3가지 방법 중 어느 것이든 상관없지만, 만약 자신이 사용하려는 Windows Socket의 특정 버전이라면, 방법에 따라 어느 것(winsock.h, winsock2.h)이 포함되는지 인지를 해야 합니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 12/3/2020]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 166  167  168  169  170  171  [172]  173  174  175  176  177  178  179  180  ...
NoWriterDateCnt.TitleFile(s)
775정성태9/13/200942284VC++: 37. XmlCodeGenerator를 C/C++ 코드 생성에 적용 [2]파일 다운로드1
773정성태9/5/200933158오류 유형 : 85. DEP 비호환 ActiveX 오류
772정성태9/2/200929411.NET Framework: 161. WPF - 윈도우 이벤트 가로채기 [1]파일 다운로드1
771정성태8/28/200923329.NET Framework: 160. WPF - 입력 포커스 외곽선 없애는 방법
770정성태8/26/200926015.NET Framework: 159. WCF - 같은 컴퓨터에서만 WCF 요청을 서비스하도록 설정
769정성태8/25/200928961개발 환경 구성: 49. GAC와 같은 Namespace Extension에 의해서 보여지는 폴더의 원본 확인 방법
768정성태8/24/200928449오류 유형: 85. WCF 연결 오류: MessageSecurityException
767정성태8/23/200936608.NET Framework: 158. 닷넷 프로파일러 - IL 코드 재작성 [14]
766정성태8/23/200937682.NET Framework: 157. C# 4.0 - dynamic 키워드 [4]파일 다운로드1
765정성태8/22/200931468.NET Framework: 156. XamDataGrid의 UnboundField 사용파일 다운로드1
764정성태8/21/200925668Windows: 47. Windows Virtual PC에 설치된 Windows 7 VPC에서 Aero 효과 사용 [3]
763정성태8/20/200929187Windows: 46. Windows 7 - XP 모드 응용 프로그램 바로가기 만드는 방법 [2]
762정성태8/18/200934715개발 환경 구성: 48. 개발자 PC 환경 - 유니코드(Unicode)를 위한 설정 [3]
760정성태8/17/200941150개발 환경 구성: 47. XmlCodeGenerator 1.0.0.4 업데이트 [2]
759정성태8/16/200932944.NET Framework: 155. 닷넷 프로파일러의 또 다른 응용: Visual Studio 2010 Historical Debugging
758정성태8/15/200926534VS.NET IDE: 65. WPF 프로젝트용 Visual Studio 패치들 [2]
757정성태8/12/200925884오류 유형: 84. TFS 작업 항목 보기 오류 - WorkItemTypeDeniedOrNotExistException
756정성태8/9/200925157오류 유형: 83. A revocation check could not be performed for the certificate.
755정성태8/6/200922824.NET Framework: 154. 이벤트 2중 구독
754정성태7/16/200935314VS.NET IDE: 64. Visual Studio 2010 - 64bit 혼합 모드 디버깅 지원
753정성태7/15/200933805.NET Framework: 153. WPF와 WinForm의 Shown 이벤트 시점
752정성태7/14/200929527개발 환경 구성: 46. .NET Service Bus 응용 사례: SocketShifter [2]파일 다운로드1
751정성태7/9/200930507.NET Framework: 152. 순환 참조와 XmlSerializer파일 다운로드1
750정성태7/7/200930875.NET Framework: 151. Team Explorer가 설치되지 않은 PC에서 System.InvalidProgramException 예외 발생파일 다운로드1
748정성태7/2/200929361.NET Framework: 150. WPF - Property Element 사용 의미파일 다운로드2
747정성태7/1/200948286.NET Framework: 149. WPF - UI 업데이트를 바로 반영하고 싶다면? [3]파일 다운로드1
... 166  167  168  169  170  171  [172]  173  174  175  176  177  178  179  180  ...