您的位置:首页 > 理论基础 > 计算机网络

Windows网络编程用VS2010调试时出现的问题及解决方案

2016-09-09 21:41 267 查看
我们在学习Windows网络编程的时候,老师要求在Visual Studio 2010里
创建一个聊天项目,小组分工编程时,我遇到的是以下的问题:

问题1::TalkClient.obj : error LNK2019: 无法解析的外部符号 "void __cdecl defProc(void)" (?defProc@@YAXXZ),该符号在函数 "void __cdecl procMenu(void)" (?procMenu@@YAXXZ) 中被引用

原因:只声明了defProc(),没有对该函数进行定义,其实是我在函数定义时,将该函数的函数名打错了。

解决方案:只要对编写的函数定义以及声明。

问题2:明明代码没有错误,调试时却提示语法错误。

原因:原来是我将.cpp文件以偏概全地等同认为与.c文件是一样的,.c 是c语言的源程序,.cpp是c++语言的源程序,这是两种不同的语言,语法不同,c++兼容c语言的绝大部分语法特性。同时,.c变量定义只能在开始,.cpp可以随时用随时定义,所以就出现在函数代码段中间部分定义的变量依旧提示未定义。

解决方案:在给文件命名的时候,将.c的扩展名转换成.cpp,即用c++编写程序。

问题3:error C4996: 'scanf': This function or variable may be unsafe. ......
原因:出现这样的警告,是因为VS2010之后的版本中认为CRT中的一组函数如果使用不当,可能会产生诸如内存泄露、缓冲区溢出、非法访问等安全问题。这些函数如:strcpy、strcat等。
解决方案:对于这些问题,VS2010建议使用这些函数的更高级的安全版本,即在这些函数名后面加了一个_s的函数。这些安全版本函数使用起来更有效,也便于识别,如:strcpy_s,calloc_s等。
当然,如果执意使用老版本、非安全版本函数,可以使用_CRT_SECURE_NO_DEPRECATE标记来忽略这些警告问题。办法是在编译选项 C/C++ | Preprocessor | Preprocessor Definitions中,增加_CRT_SECURE_NO_DEPRECATE标记即可。
另外一种解决方法:
#pragma warning(disable:4996) //全部关掉
#pragma warning(once:4996) //仅显示一个

问题4:error C2051: case 表达式不是常量

                解决方案:是switch…case用法的掌握不牢,case 后接常数表达式或者常数,而我把它后面赋值一个字符,将“T”改成’T’.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐