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.youkuaiyun.com/qingtingchen1987/article/details/7688013
本文解析了C++编程过程中常见的编译和链接错误,包括变量重定义、符号多重定义、类型缺失等,并提供了实用的解决方法。
1883

被折叠的 条评论
为什么被折叠?



