• WSASocket函数未定义和重定义错误


    报错error C2065: 'WSASocket' : undeclared identifier

    意思是WSASocket函数没有声明定义

    WSASocket()是:创建一个与指定传送服务提供者捆绑的套接口,可选地创建和/或加入一个套接口组。

    此函数为socket()的扩展版本,其功能都是创建一个原始套接字。使用时需要包含

    winsock2.h 头文件和链接ws2_32.lib库。

    刚开始我的情况是再cpp文件中包含了windows.h的头文件,也链接了ws2_32.lib库,然后出现没有定义的错误,后来我通过百度查到其需要包含winsock2.h的头文件然后我再windows.h后面又包含了winsock2.h的头文件,但是出现的报错就更多了,报错如下:

    c:program filesmicrosoft visual studiovc98includewinsock2.h(99) : error C2011: 'fd_set' : 'struct' type redefinition
    c:program filesmicrosoft visual studiovc98includewinsock2.h(134) : warning C4005: 'FD_SET' : macro redefinition
            c:program filesmicrosoft visual studiovc98includewinsock.h(84) : see previous definition of 'FD_SET'

    。。。。。。。。(还有好多)

    然后我将winsock2.h的头文件删了,又到百度找答案,然后查到一篇博文说他误打误撞在winsock.h的头文件中包含stdafx.h头文件,我也试了一下,但是还是不行,可能是我的文件不同吧,因为编译之后我说stdafx.h没有定义,我找一下放头文件的文件夹是没有这个文件,我不至于这样就到网上找找一个包含进去吧,然后我打开我引入的头文件windows.h看了一下,里面包含了winsock.h,然后我到MSDN Library 找才知道winsock2.h是winsock.h的升级版,不能放在一起用,所以我就将winsock2.和定义到windows.h文件的前面,然后就可以了。

    最后我打开winsock2.h和winsock.h两个文件,发现他们的宏定义是这样的

    winsock2.h中定义了winsock.h的宏,说明如果先引入了winsock2.h同文件再引入winsock.h头文件,编译器是不会去编译winsock.h头文件的,如果倒过来就不同,并且会出现很多错误,是因为winsock.h和winsock2.h存在很多相同的定义或者其它。其实在winsock2.h文件中就能找到答案,下图“阻止包含windows.h中的winsock.h”。

  • 相关阅读:
    UICollectionView 应用
    关于UIWebView不能响应touchesBegan等四个方法的解决案例【可以检测 单击双击】
    IOS6 中新特性介绍
    KVO 使用
    IOS 学习资料汇总(^_^)
    [DEVDIV翻译] Core Animation中文翻译_第一章_什么是核心动画
    StoryBoard学习..(很详细.)
    Intent跳转到系统应用中的拨号界面、联系人界面、短信界面及其他
    sqlite语句主页
    Android的快速开发框架 afinal
  • 原文地址:https://www.cnblogs.com/ke-yi-/p/10175859.html
Copyright © 2020-2023  润新知