1. 解决error LNK2005: ___crtExitProcess 已经在 LIBCMTD.lib(crt0dat.obj) 中定义
    有的时候, 在 Debug 模式下编译没问题, 换到 Release 模式就发生一堆问题.
    典型的例子, 就是因为 c++ runtime library 设定不同, 所造成的重复定义连结错误.
    而另一个常见的例子是 专案与 library 使用不同的字元集合设定
    (如: 一个用 Unicode Character Set, 另一个用 Multi-Byte Character Set)

这个错误发生原因, 有可能是

  1. 你 link 的 lib 使用 C++ Multi-threaded DLL (/MD)
  2. 而你的 source 使用的 C++ runtime library 是 Multi-threaded (/MT)
    导致重复定义
    解决方法:
    两个使用相同的 C++ runtime library.例如都使用 static 的 Multi-threaded (/MT).
  3. 错误 1error LNK2005: “private: __thiscall type_info::type_info(class type_info const &)” (??0type_info@@AAE@ABV0@@Z) 已经在 LIBCMT.lib(typinfo.obj) 中定义 MSVCRTD.lib
    项目 -> 属性 -> c/C++ -> 代码生成 -> 运行时库 设置为: 多线程调试 DLL (/MDd)
    被引用的库和调用的程序编译选项不同,需要改成一致后编译

3.#pragma once与 #ifndef的区别
为了避免同一个文件被include多次
1 #ifndef方式
2 #pragma once方式
在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。
方式一:
#ifndef SOMEFILE_H
#define SOMEFILE_H
… … // 一些声明语句
#endif
方式二:
#pragma once
… … // 一些声明语句
#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况
#pragma once则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当然,相比宏名碰撞引发的“找不到声明”的问题,重复包含更容易被发现并修正。
方式一由语言支持所以移植性好,方式二 可以避免名字冲突

4.error LNK2019: 无法解析的外部符号 __imp__PathCombineW
PathCombine是Shell api 需要引入库#pragma comment( lib, “shlwapi.lib”)

5.error C2662: "MyClass::GetName()”: 不能将“this”指针从“const MyClass”转换为“MyClass &”
bool MyClass::operator==(const MyClass* n1) const
{return GetName() == n1->GetName();}
原因是不能在const函数中调用对象的非const方法,MyClass中的GetName()必须是const的。

6.template 模板
模板声明和定义必须在同一个文件中,而且只有实例话模板类型时才编译模板实例

7.error C2275: “MyClass”: 将此类型用作表达式非法 MyClass.Instance();
原因:Instance是静态方法,用.引用会出错。应该是MyClass::Instance()

8.error LNK2019: 无法解析的外部符号 "public: __thiscall MyClass(void)
原因:只声明了构造函数,MyClass(); ,但未定义。 可以定义空函数,或者直接注释掉,使用默认构造函数。

9.error C2504: “testing”: 未定义基类
class PackToolTest : testing.Test {}
原因:Test是testing命名空间下的一个类,需要用域操作符,testing::Test
还有一个问题,缺少基类继承权限(public、protected、private)

10.error C2864: “MyClass::_nullpack”: 只有静态常量整型数据成员才可以在类中初始化
class MyClass {string _nullpack = “test”;}
原因:c++ 中,成员变量不能在声明时初始化,而是在构造函数初始化列表中先初始化

11.error LNK2019: 无法解析的外部符号_WinMain@16int main()
原因:由于创建的是Win32 Project,和Win32 console Project的链接库不同
方法1:在程序最开始的地方加上以下语句
#pragma comment(linker, "/subsystem:console ")
方法2:project > > setting > > 在link 的project options 中将/subsystem:windows(console)删了

12.类似“已经在 msvcprtd.lib(MSVCP80D.dll) 中定义”问题
vs2005 Debug /Release需要分别配制
分析一下错误来源,会发现:

  1. 错误来源主要是重复定义的问题,而且重复定义的基本上都是VC Runtime和Standard C++ Library中的函数
  2. LIBCMT和LIBCPMT为Release下的Lib,本来不应该出现在Debug版本的链接的Lib中
  3. 重复定义的问题主要出现在:LIBCMT, LIBCPMT, MSVCPRTD, MSVCRTD
    来看看出问题的LIB是那些:
  4. LIBCMT:C Runtime库的多线程静态链接的Release版本
  5. LIBCPMT:C++ Standard Library的多线程静态链接的Release版本
  6. MSVCPRTD:C++ Standard Library的多线程DLL的Debug版本
  7. MSVCRTD:C Runtime Library的多线程DLL的Debug版本
    当 前我们的配置是多线程DLL的Debug版,因此3和4是应该出现在link的列表中的,不属于多余。而后两者则是只是当多线程静态链接Release版 中才会出现。这提示我在项目中加入的ANTLR.LIB可能是造成这个问题的根源,因为静态库的编译选项很容易和主程序发生冲突,并且根据实际信息我们可 以看出ANTLR.LIB应该是用多线程静态链接的Release版本来编译的。
    解决方法:
    1、首先查看编译项目依赖的其他项目的运行时库是否一致
    2、如果不一致,改为同样的运行时库,如在下编译的是:“多线程调试 DLL (/MDd)”,现在需要把所有的依赖项目的运行时库都改为一致的库,就OK了。

13.error C2143: 语法错误 : 缺少“;”(在“*”的前面)
原因:产生错误处,某类型未include,可能头文件名拼写错误、头文件名已更改

14.error C2572: “MyClass::Invoke”: 重定义默认参数 : 参数 2
string MyClass::Invoke(const CParam& paraObj, INVOKETYPE type = ASYN)
原因:默认参数,只需在声明时指定。方法定义的时候无需指定默认参数。
string MyClass::Invoke(const CParam& paraObj, INVOKETYPE type /= ASYN/)
{ … }。。。。。

C++常见编译/链接错误及其解决办法相关推荐

  1. vc6.0使用PathFileExists(...)函数的时候链接错误的解决办法

    PathFileExists(...)函数使用的时候链接错误: error LNK2001: unresolved external symbol __imp__PathFileExistsA@4 首 ...

  2. android.mk 编译32位_C/C++初学者常见编译错误及其解决办法

    用户在C/C++集成开发环境(例如 Dev-C++)中编辑了源代码,执行编译之后,常常会因为源代码中存在问题而出现编译错误(它们会显示在编译窗口中).初学者常常会面对这些错误而不知如何处理.本文下面列 ...

  3. php5编译安装常见错误和解决办法集锦

    最近在给开发同事折腾开发测试环境,其中就有 php 的编译安装.由于每个人的需求不一致,所以也接触到了各种模块编译和集成,中间不乏各种编译依赖报错. 正好,搜了几次都是下面 2 篇文章内容,干脆就转到 ...

  4. php源码安装失败,php编译安装常见错误及解决办法

    php编译安装常见错误及解决办法 1.configure: error: No curses/termcap library found 网上有的说法是:–with-named-curses-libs ...

  5. VS2019运行OpenGL时出现的常见错误及解决办法

    OpenGL程序在低版本的VS中运行成功,但在VS2019中运行却出现各种错误,以下是常见错误的解决办法.(文章结尾有库的链接哟~) 问题一:无法打开文件"glaux.lib" 解 ...

  6. python2发送http不编码_[转]Python 2.x中常见字符编码和解码方面的错误及其解决办法...

    Python 2.x中的字符编码,设计的的确不好,导致初学者,甚至是即使用Python很长时间的人,都会经常遇到字符编解码方面的错误. 下面就把一些常见情,尽量的都整理出来,并给出相应的解决办法. 看 ...

  7. cocos2d-x-2.2中编译cocos2d-win32.vc2010.sln出现:C1083 pthread.h No such file or director错误的解决办法

    cocos2d-x-2.2中编译cocos2d-win32.vc2010.sln出现:C1083 pthread.h No such file or director错误的解决办法 打开cocos2d ...

  8. Oracle常见ORA错误及解决办法

    Oracle常见ORA错误及解决办法 问题1 1.1 错误现象: EXP-00008: ORACLE error 1013 encountered ORA-01013: user requested ...

  9. Oracle的常见错误及解决办法

    ORA-12528: TNS:listener: all appropriate instances are blocking new connections ORA-12528问题是因为监听中的服务 ...

最新文章

  1. 【Python】for 循环次数
  2. 详解Linux-I2C驱动
  3. linux 分布式 程序管理,linux--------------git分布式系统项目管理(1)
  4. matlab 三维图像配准,[转载]Matlab实现多种图像配准(转)
  5. 解决ASP.NET MVC 下使用SQLite 报no such table的问题
  6. mysql 请求超时_由请求超时引发的mysql慢日志问题
  7. php7版本一句话木马,一句话查找 PHP 木马
  8. 白盒测试之语句覆盖案例
  9. unity性能优化初级入门篇
  10. Hadoop基础教程-第1章 环境安装配置(1.6 SSH免密登录)
  11. 用python解决题目:输入某年某月某日,判断这一天是这一年的第几天?
  12. 职场办公Excel篇
  13. 关于查看nginx的访问量的部分总结
  14. Daily English Jun 14,2011
  15. 工厂自动化的生产线属于计算机应用,计算机试题
  16. 树莓派烧写OpenWrt系统后外接4G模块实现4G路由即MiFi
  17. 未来的你会感谢现在的自己-首发篇
  18. 2022年Redis最新面试题 - Redis缓存问题
  19. 知识点 channel的使用
  20. 抄送(Carbon Copy)

热门文章

  1. C# 合并PDF文件
  2. 从这份报告,我读出了数据从业者的局限与未来
  3. 千亿赛道群雄逐鹿,口腔医疗服务商们如何做长远品牌?
  4. IE浏览器时代终结!IE浏览器将被陆续下架
  5. java 记录一下韩顺平QQ多用户聊天系统-离线消息发送问题invalid stream header: 7371007E
  6. 信息论与编码2 期末复习-线性码
  7. 天津理工大学 信息论与编码实验4 离散信道编码-线性分组码
  8. queen mary java_机器学习网站
  9. mysql实现oracle的同义词_Oracle的同义词(synonyms)详解
  10. 日语自学资料(可下载)