TCP连接加数据库之错误锦集(一)

1、 d:/demo/vc编写的socket简单聊天程序/testserver/testserverdlg.cpp(245): error C2360: “is8001”的初始化操作由“case”标签跳过

原因及解决办法:是说这个case 8001:语句可能没有被执行到(执行其他case了)导致变量没有初始化而导致接下来的错误,所以需要把变量放到switch前面声明初始化,可是我又不想把初始化放在switch前面,还有一个解决方法,在swith中定义内部变量加括号,就可以了。

2、产生重定义

原因:有可能是定义了全局变量之后又在另一个关联文件中使用!

 

上述过程分为两步:

(1)每个cpp先生成各自对应的obj即编译单元;

(2)最后通过链接器把所有obj链接成一个exe形成一个程序。

而重定义在这两步之中都可能发生。

第一步中,如果一个cpp内不小心定义了多份(>=2)相同数据,在生成obj,还没链接前就已经报错了。

第二步也是最常出现重定义的地方。你可能不小心地在两个cpp中定义了相同的数据,各自生成obj的时候并不会报错,但是当链接的时候就会出现重定义。或者你的项目的多份cpp都include了同一份.h文件,而这个.h文件存在定义,一样的,在各自生成obj的时候不会报错(如果没有其他的重定义的话),但是当链接的时候就会报错。

3、在编译时,编译能够通过,但链接时出了问题,出现”error   LNK1169:   找到一个或多个多重定义的符号“的错误。

原因:经过分析,确定了这是由于两个实现文件中重复包含了头文件而造成的。

解决方法:在A.h中的三个变量声明前加上extern 关键字,然后在B.cpp中不加extern关键字再次声明这三个变量。于是编译链接顺利通过。

4、error:LNK2005已经在*.obj中定义

原因:1、重复定义全局变量

全局变量是针对整个工程的,在一个CPP文件的定义:int nCount;那么在使用的CPP文件中就应该使用extern int nCount即可,如果还是使用int nCount 就会产生LNK2005错误;

根据C++标准的规定,一个变量是声明,必须同时满足两个条件,否则就是定义:

1)使用extern 关键字 

2)不能给变量赋初值

2、头文件的重复包含

包含的头文件中含有变量、函数、类的定义,在其他使用的地方多次包含,造成重复包含,产生LNK2005错误,

解决方法:

1)使用宏在头文件head.h中加入

 #ifndefHEAD_H_ 

#defineHEAD_H_

......

#endif

2)使用预编译,文件开头加入

#pragmaonce

3、使用第三方库造成

主要情形是C运行期函数库和MFC的库冲突造成的。具体的方法就是将提示出错的库放到另一个库的前面。

5、error C4430:缺少类型说明符– 假定为int……

原因:(1)可能是两个cpp文件内头文件互相包含

     (2)头文件顺序不对

解决方法:(1)将其中一个删除

               (2)调整头文件顺序

6、error C2001:常量中有换行符

原因:文件编码问题

解决方式: (1)全部用英文编码,不要用中文

(2)偶数中文 或 结尾加英文的符号,如"."

(3)将文件编码进行一个手动(如记事本)转换,改成UTF-8格式

7、无法访问类中私有成员变量

原因:一般是内存越界

解决方法:检查是否存在内存越界

http://blog.csdn.net/qingtingchen1987/article/details/7688013

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值