socket编程,从控制台转到MFC下碰到的几个问题

51 篇文章 0 订阅

在使用VC6.0做东西时,产生几个典型的错误,特列如下,以备后查。

错误1:fatal error C1010:unexpected end of file while looking for precompiled header

问题很奇怪,在控制台项目下编译时,完全正确,把文件添加到MFC项目下就出现了上述错误。

字面解释:

致命错误C1010:在寻找预编译指示头文件时,文件未预期结束。

也就是没有找到预编译指示信息的头文件。

发生原因:

通过添加文件的方式,添加了一些cpp文件到一个MFC的程序,但该cpp文件并不是MFC,而是标准的C++。 

深究原因:

在VC6.0的MFC项目设定中,会默认设置 .cpp文件 编译时,要有stdafx.h ,以增加编译速度。

而标准的C++ 的 .cpp 文件是不包含 stdafx.h 的,所以才会出现如上错误。 

解决方案:

方案1: 右键单击项目工程中的cpp文件,/菜单 /项目 /设置 C/C++标签页中,把 分类对应的下拉框中,选择 预编译的头文件,选择 不使用预编译页眉(应该译为:预编译头文件)

注意,是 .cpp文件的设置,而不是整个项目的设置。MFC中自动生成的 .cpp文件必须使用 stdafx.h 进行预编译!

方案2:在.cpp文件开头添加包含文件stdafx.h。 #include"stdafx.h"

个人比较喜欢方案1。

补充:stdafx.h头文件

名称的英文全称为:Standard Application Framework Extensions 

所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。

错误2:winsock2.h(2310) : error C2375: redefinition; different linkage

字面解释:

类型或结构体重定义

出现情形:

同样是控制台项目文件添加到MFC项目中出现的问题。

由于项目中会涉及到socket编程,所以在创建MFC可执行文件时,选中了“Windows Socket的支持选项”。因此,VC6.0 会自动在stdafx.h 中增加:

#include <afxsock.h>// MFC socket extensions

afxsock.h会自动包含 winsock2.h 

这和从控制台项目下添加的文件(#include winsock2.h)中都会包含winsock2.h,所以很多东西都会提示说 redefinition ,即重定义。

解决方法:

方法一:可以在新添加的文件中删掉#include winsock2.h

方法二:可以删除stdafx.h中的 #include <afxsock.h>

比较倾向于第二种,因为控制台下已经编译、链接无误,这样改动比较少。

错误3:链接错误

这个问题比较纠结,不知从何下手。刚开始一直以为是stdafx.h跟winsock2.h两头文件矛盾的结果,所以调半天,结果还是不行。

一般碰到链接错误,多半是找库文件找不到。在 /工程 /设置 /链接 中,增加库文件Ws2_32.lib 后,链接成功!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值