碰到的错误:
这里提供本人在编程中遇到的问题,解决办法很多是搜集来的。对问题产生的原因和原理还不能完全阐述正确,还希望大家能够指正,谢谢大家!!
本人使用的编译器是: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编码,而使用多字节编码:
CString编码原因;_T是一个宏,作用是让你的程序支持Unicode编码。因为Windows使用两种字符集ANSI和UNICODE。
二、 fatal error C1859: “Debug\***.pch”意外的预编译的头,只需重新运行编译器可能会解决此问题。
1、解决办法:
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 ,让头文件只编译一次,可以解决这个问题