VC常见编译问题

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 

 

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值