1、error C2065: 'Vector' : undeclared indentifier
分析: 没有包含文件vector ,同时 加上命名空间: using namespace std;
如果添加了#include <vector> 但是没有使用命名空间std,会爆出:“syntax error: identifier 'vector'” 的错误;
原因: 不能识别类,没有包含头文件 和指定的命名空间;
名称空间有助于组织程序中使用标识符,避免名称冲突。由于标准库是使用性的头文件组织实现的,它将名称放在std名称空间中,因此使用这些头文件需要处理名称空间。
尽量不要使用Using namespace std; 因为添加了这句话你就导入了std中所有的标准名称,太随意了; 为避免可能的命名冲突,当你要使用标准库中的某项库类时,添加Using std::vector;
2、error C2664: "outputDebugString ": can not covert parameter ,from "const char * " to "LPCWSTR"
error C2440:“initializing ”: Cannot convert from "Whar_t *" to "std ::basic _string <Elem_Traits_Ax>"
原因:宽字符问题:
解决方法: 右键点击项目名,将解决方案的ProPerties ---- General --- character set 属性
改为: use Muti- Byte characteristic Set;
3、warning C4091: ignored on left of 'char' when no varible is declared;
原因:定义写错了, char * fdb = “SSS”;
需要改为: char fdb[] = "sss";
4、"Building MFC application with /MD[id](CRT dll version)" require MFC shared dll version. Please #define _AFXDLL or dont use /MD[d]
修改方法: 再头文件中添加 #define_AFXDLL 即可
5、error C2653: 'IBPP' is not a class or namespace name ;
error C 2227: left of "->start " must point to class/union/generic type
error C4430:missing type specifier--int assumed. Note:C++ does not support default --int
分析:都不能识IBPP这个类
解决: 添加头文件 “IBPP/ibpp.h”
6、error C2864: "BSIMOD: m_eleUseRepair: only static const intergral data members can be initialized within a class;
原因:类中 只有静态全局变量才能使用是static 修改方法,将类中的初始化去掉;
静态全局变量的生存周期和全局变量是一样的,但是静态全局变量的作用域被限制在本文件中;
7、error C2512:"TiXmlelement" no appropricate default constructor available;
原因:开源代码中,TiXmlElement 没有默认构造函数,所以,全局变量初始化后是正确的;但是作为成员是不行的。
构造函数的初始化的执行顺序为:
A、父类构造函数‘
B、类成员构造函数
C、初始化类表构造函数’
D、本身的构造函数
方法: 使用static 将成员全局化, 这样TiXmflElemennt 的成员 就不用默认构造函数;
8、Can not add two Pointer
原因:string 中对 “+”的重载不允许连续加。
错误语句: OutputDebugString(_T(str) + "\t" + str908TxtIndex + "\t" + strMsg)
改为:char str[0] = [0];
itoa(i, str, 10);
string strlog = str;
strlog += "\t";
strlog += str908TxtIndex;
outPutDebugstring(_T(strlog.str()));
9、fatel error C1004: unexpected end of file found;
原因: 1、{}不匹配;
2、#if 0 没有对应的#endif
10、ULONG_PTR、DWORD等类型不存在定义;
分析: 这些类型在winbase.h中使用了,但在#include winbase.h之前 必须先将windows.h 包含进来 ;
解决方法:
换高版本vc , 只需加入 #include <windows.h> 即可
可以自己写一个定义: typedef unsigned int32 DWORD;
也可以将 IDA中的defs.h 头文件加到工程中;
也可以使用创建MFC工程,这样就可以直接使用DWORD类型;
12、error C1220: warning treated as error: no object generated;
解决: VS项目属性--- C++--- ”Treat Warning as Errors“ 选择NO
同时,Warning Level 设置为Level 3;
13、error: initialing of 'v70' is kipped by 'case'
解决:将case中定义的局部变量写到switch case 之外;
14、大小端的问题
unsigned __int8 ans[] = "sasgasgasa";
unsigned __int16 v7 = *(unsigned __int16*)(ans + 3);
得到的是 v7 = ag, 而我们要的是ga;
所以应该写成: unsigned __int16 v7 =*(ans + 3) << 8 | *(ans + 4);
15、error :syntax : missing ';', befor '{';
这种错误很多原因,往往是真的少了;又或者 数据类型有错误、数据操作有错误;
当前的原因是: 对字符串的操作有误;
代码如下:
unsigned char* ans = new unsigned char[3];
ans[] = {'0x1','0x2','0x3'}; //不支持=
字符指针不能这么操作;字符指针初始化指向的是数据首地址,为NULL也行;
C语言没有直接操作字符串的运算符;
char * ptr = “sgaogoasdfag”;//字符指针指向此常量取数据首地址
字符数组:char ptr[] = "123";,char ptr[] = {'1','2','3'}; 两者相差一个字节,前者最后多一个'\0';
可以使用string的API:
#include <string.h>
#include <stdio.h>
memcpy\memcat 等函数进行操作;
16、error C2040: “v42”:“unsigned int [96]”与“int”的间接寻址级别不同
原因:查看是不是定义了两个v42,一个是unsigned int [96] 类型,一个是int;
17、 不能将 "unsigned int (*)(unsigned int a1_ansNegId, unsigned char *a2, unsigned int a3)" 类型的值分配到 "int (*)(unsigned int, unsigned char *, unsigned int)" 类型的实体
原因:函数指针的定义必须与指向的函数的定义是一致的,参数,返回值;
int( *v11)(unsigned int , unsigned char *, unsigned int ); // r3@15
unsigned int NegResTransform(unsigned int a1_ansNegId, unsigned char *a2, unsigned int a3);
v11 = NegResTransform;
修改: unsigned int( *v11)(unsigned int a1_ansNegId, unsigned char *a2, unsigned int a3); // r3@19
18、“ReadPath”: 重定义;多次初始化。
原因:变量在头文件和.cpp 中重复定义,其中特别注意,extern 只能声明,不能定义;
19、error C2732: 链接规范与“FreeCalcStack”的早期规范冲突;
原因:因为C和C++同一个函数名在编译后保存在内存中的函数名不同
解决:头文件使用下面的语句包含,一句话兼容C和C++语言。
#ifdef __cplusplus
extern "C" {
#endif
/*...*/ 在此处添加需要引用的函数定义
#ifdef __cplusplus
}
#endif