C++编程所遇到的error(持续更新和补充)

碰到的错误:

这里提供本人在编程中遇到的问题,解决办法很多是搜集来的。对问题产生的原因和原理还不能完全阐述正确,还希望大家能够指正,谢谢大家!!

本人使用的编译器是:Visual Studio 2008

一、error C2664: “int ATL::CStringT<BaseType,StringTraits>::Find(wchar_t,int) throw() const”: 不能将参数 1 从“const char [8]”转换为“wchar_t”

1、错误出现的代码位置:

for (CurPos=doc.<span style="color:#ff0000;">Find("<script",CurPos)</span>;CurPos!=-1;CurPos=doc.<span style="color:#ff0000;">Find("<script",CurPos)</span>)
	{
		int lastPos = doc<span style="color:#ff0000;">.Find("</script>",CurPos)</span>;
		CString script = doc.Mid(CurPos,lastPos-CurPos+9);
		ScriptParse(script);
		doc = doc.Left(CurPos)+doc.Right(doc.GetLength()-lastPos-9);
	}

2、解决办法:

Ⅰ、  使用_T宏让程序支持unicode编码:

	for (CurPos=doc.<span style="color:#009900;">Find(_T("<script"),CurPos)</span>;CurPos!=-1;CurPos=doc.<span style="color:#009900;">Find(_T("<script"),CurPos)</span>)
	{
		int lastPos = doc.<span style="color:#009900;">Find(_T("</script>"),CurPos)</span>;
		CString script = doc.Mid(CurPos,lastPos-CurPos+9);
		ScriptParse(script);
		doc = doc.Left(CurPos)+doc.Right(doc.GetLength()-lastPos-9);
	}

Ⅱ、让工程不使用unicode编码,而使用多字节编码:


3、原因和原理:

CString编码原因;_T是一个宏,作用是让你的程序支持Unicode编码。因为Windows使用两种字符集ANSI和UNICODE。


二、 fatal error C1859: “Debug\***.pch”意外的预编译的头,只需重新运行编译器可能会解决此问题。

1、解决办法:

安装补丁:VS90SP1-KB976656-x86.exe

2、原因与原理

当启用了 创建/使用预编译头 编译器选项时,编译器要求预编译的头文件和相对的模块不移动各编译间。但是,地址空间布局随机 (也称为 ASLR) 功能随机重新定位在进程中的模块。因此,各编译间移动的模块时,将发生该错误。


三、 fatal error C1853: “Debug\WipeHtmlTag.pch”预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)

1、解决办法:

  重新生成解决方案


四、 error C2065: “iterator”: 未声明的标识符 

1、出现错误的代码位置:


2、解决办法:

  Ⅰ、给文件添加头文件 #include<iterator>

  Ⅱ、给iterator添加作用域,像这样:

        


四、

1>正在链接...
1>LINK : 没有找到 C:\Users\Administrator\Desktop\wanalysis\Debug\WebAnalysis.exe 或上一个增量链接没有生成它;正在执行完全链接
1>msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) 已经在 LIBCMTD.lib(typinfo.obj) 中定义
1>msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) 已经在 LIBCMTD.lib(typinfo.obj) 中定义
1>LIBCMTD.lib(crt0init.obj) : warning LNK4098: 默认库“msvcrtd.lib”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
1>C:\Users\Administrator\Desktop\wanalysis\Debug\WebAnalysis.exe : fatal error LNK1169: 找到一个或多个多重定义的符号

1、解决办法:

在”项目->属性->C/C++->代码生成->运行库"中选择合适的选项,如果是debug,选择“MTd“或者”MDd“。

如果发现设置上述的选项只是让错误变少,并没有解决,那么依据上述的错误红色标识的部分,将”msvcrtd.lib“和"LIBCMTD.lib"添加到”项目->属性->配置属性->l链接器->输入“中,如下所示:(如果添加之后依然没有解决,那么现将其忽略,即”忽略特定库“,然后在添加)

 error C2011: “vclock”: “class”类型重定义

1、问题出现原因:

  由于头文件重复包含导致

2、解决办法:

在头文件最前面加上 #pragma once ,让头文件只编译一次,可以解决这个问题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值