vc++错误提示,vc++出错

  vc++错误提示,vc++出错

  1.未解决的外部定义错误

  xyView.obj:错误LNK2001:未解析的外部符号 public:_ this call cmyo crinfo:cmyo crinfo(void)(?0CMyOCRInfo@@QAE@XZ)

  可能是因为构造函数没有实现代码。

  2.释放HBITMAP句柄失败会导致无法创建位图的问题。

  2004.8.17

  HBITMAP句柄没有及时释放,当创建的位图数量达到30个时,出现8号错误,即内存不足。

  3.调试窗口中的输出信息。

  跟踪;

  4.如果使用向导创建新类时只有一个自定义类型,这可能是因为。clw文件不生成,直接生成。

  5.注意变量的类型范围,强制转换可能导致数据溢出;以下示例将导致无限循环:

  for(字节I=0;i i ){

  .

  }

  注意:因为字节类型的表示范围是:0-255,所以I永远不能大于255,导致死锁。

  6.不包括stdafx.h引起的错误:

  致命错误C1010:查找预编译头指令时出现意外的文件结尾

  只需将stdafx.h文件包含在。cpp文件。

  7.避免重复包含头文件。

  # IFN def _ INC _ PUBLIC _ H _ 32564987132178947

  # define _ INC _ PUBLIC _ H _ 32564987132178947

  //中间写代码

  .

  #endif

  注意:#ifndef可以改成#if!清晰的

  8.存在重复定义错误,例如:

  d:/program files/Microsoft visual studio/vc98/include/dbdaoint . h(33):错误c 2011:“EditModeEnum”:“enum”类型重新定义

  检查是否在all中定义了include stdafx.h。h文件并删除它。

  全部搜索stdafx。cpp文件查看stdafx.h文件是否重复包含,删除重复的。

  另一个例子是:

  refimagedll . obj:error lnk 2005: int _ _ cdecl getcamarefimage indexofid 1(class CArray class CCameraRefImage,class CCameraRefImage,int)(?getcamerarefimageindexofid 1 @ @ YAHAAV?$ CArray @ VCCameraRefImage @ @ V1 @ @ @ H @ Z)已经在InterFaceFile.obj中定义

  因为函数是在。h文件,并且是完全实现的,那么包含在多个文件中就会出现重复定义错误。解决方法是

  将函数定义为inline,这样它就不再是一个函数,而是直接被一段代码替换,例如:

  int inline GetAge(){

  返回10;

  }

  9.不完整的类定义,例如:

  refimagedll.h(14):错误C2236:意外的“类”CRefImageListDll

  通常,该文件包含不完整的类定义,例如:

  类别a{

  int age

  }

  后面少了一个分号,应该改成:

  a级

  int age

  };

  10.纯虚拟类不能生成实例,例如:

  d:/program files/Microsoft visual studio/vc98/MFC/include/afx templ . h(201):错误c 2259:“CKernel”:由于以下成员,无法实例化抽象类:

  如下所示:

  a级

  公共:

  虚拟void SetValue(int I)=NULL;

  }

  b类:公共a{

  私人:

  int m _ iID

  公共:

  }

  在这种情况下,B也无法实例化,因为B中没有SetValue()方法,但可以通过在B中实现SetValue()方法来解决。

  11.重复发布导致的问题

  从代码0x77f9193c调用的用户断点

  上面的原因是一个类的成员被释放了,最后因为其成员已经被释放(成员被释放但未设置为NULL)而析构该类时出错。

  12.试图执行系统不支持的操作。

  请检查当前窗口模块是否使用了不属于它的其他资源。

  13.Dll中调用对话框等资源的方法(如何在动态链接库中显示对话框)2006.7.24

  将以下代码添加到动态链接库的显示对话框函数中:

  AFX _ MANAGE _ STATE(AfxGetStaticModuleState());

  如果需要导出对话框的对象并在外部显示,可以重载DoModal()方法,在方法中添加afx _ manage _ state(afxgetstaticmodulestate());

  14.动态链接库和静态链接库的混合使用。

  症状:使用LoadLibrary()加载动态链接库时,返回0,函数不成功。调用GetLastError()返回结果126。MSDN说:

  找不到指定的模块。错误_模块_未找到

  发现这个动态链接库以静态的方式调用另一个链接库(B),另一个链接库以静态的方式调用另一个动态链接库(C),但是C并没有复制到程序所在的目录,所以无法正常加载。

  15.宏定义导致系统错误。

  甚至三个错误:

  未声明变量时,忽略“unsigned char”左侧的

  错误C2143:语法错误:缺少“;”在“常数”之前

  错误c 2106:“=”:左操作数必须是左值

  代码如下:

  byte R=(byte)(AColor0x ff);

  按常理应该没问题,但是因为R是在函数库里定义的,所以R不能作为变量。

  16.16号。GetDocument()函数的调试版本可用,但发布版本无法使用,说明该函数没有实现代码。

  检查。h文件末尾有以下代码:

  # ifndef _ DEBUG//LCD model view . CPP中的调试版本

  内联CXXXDoc* CXXXView:GetDocument()

  { return(c xxxdoc *)m _ p document;}

  #endif

  原则:对于从未被调用过的函数,可以没有实现代码。如果有调用,你必须有它的实现代码。微软使用宏定义来区分发布版本和调试版本。

  17.VC环境下FindFile无法用于文件搜索的问题(刘东言发现2007年3月1日陆宽解决)

  在VC的集成开发环境下,点击搜索文件按钮,VC崩溃。

  检查注册表项:HKEY _当前_用户/软件/微软/dev studio/6.0/search old/fif _ folders。

  发现其值是不存在的目录,导致崩溃。解决方法是清除键值。

  18.记住使用函数的参数(2007年3月28日)

  例如,错误c2220:警告被视为错误-没有生成目标文件

  或者:警告c 4100:“aparamcount”:未引用的形参

  9.VC项目每次都重新编译(2007年4月18日被王政发现)

  问题:每次点击F7、F5或Ctrl+F5,所有VC项目都会被编译。

  解决方法:发现系统时间早于项目创建时间,导致这个问题。

  20.DLL出口法(2007年6月1日)

  1.在def文件中导出,格式为:Function @n例如:ShowName @1

  2.将_declspec(dllexport)标识符直接添加到函数声明中

  注意,第一个只能导出函数,不能导出类,而第二个可以导出函数和类。

  第二种方法有一个问题:只能提供给VC程序进行静态调用,因为导出的函数名都添加了参数的信息,比如“?ShowName@@YAXXZ "

  解决方法是在它的声明前面加上extern C ,例如:extern C _ declspec(dll export)void showname()

  综上所述,第二种方法既可以支持静态调用,也可以支持动态调用,还可以支持类导出。

  参见示例附件。

  21.修改系统默认调试器(2007.6.29)

  Win2000:

  注册表:HKEY _本地_机器/软件/微软/win nt/当前版本/aedebug

  c:/Program Files/Visual Studio/Common/MSDev/Bin/MSDev . exe -p % LD-e % LD

  2.在动态库中析构CString函数时出错(2008年2月25日)

  说明:CString作为参数,主程序用调试版编译,DLL用Release编译。

  析构CString时出错。

  解决方法是用Debug或Release编译主程序和DLL。

  23.程序每次在VC环境下运行,都要求重新编译(2008 . 2 . 28)

  问题:不管是不是全编的,都有以下提示:

  一个或多个文件过期或不存在。

  需要构建这些文件:

  /公司/其他项目/打印项目/print mbw _ workspace/execute/print mbw . exe。/Release/MyImageWnd.obj

  更多文件.

  您想要构建它们吗?

  解决方法:原因是代码文件的日期晚于当前日期,导致编译器认为obj文件不是最新的,需要重新编译。解决方案是将这些文件的修改日期更改为当前日期。

  24.类成员函数指针计算不准确(陆宽2008年5月30日发现)

  typedef char(cmy class:* my func)();

  my func * pFuncList=new my func[16];

  这段代码应该创建一个MyFunc类型的类成员函数指针数组,长度为16,实际长度为64字节。但结果是生成了一个实际长度为16字节的数组。将类型char替换为void,实际长度变为0字节,实际长度为64字节,实际长度为128字节。也就是说,vc编译器把返回值的长度误认为是函数指针的长度。但是sizeof(MyFunc)确实等于4。

  如果用普通函数指向类型,从类型中去掉CMyClass:就万事大吉了。

  我觉得这是vc编译器的一个严重bug。但是这种语法一般只在框架代码中使用,很少出现在实际代码中,所以很难发现bug。

  解决:

  分配一个普通的int类型数组,并将返回的数组强制转换为MyFunc * type。

  my func * pFuncList=(my func *)new int[16];

  不知道这个bug在新版VC中有没有解决?

  25.类成员函数指针的大小(陆宽2008年6月19日发现)

  类CTestParentClass{

  公共:

  CTestParentClass(){}

  虚拟void调用()=NULL

  };

  类CTestChildClass:public CTestParentClass,CString {

  公共:

  CTestChildClass(){}

  虚拟void调用(){

  void(CTestChildClass:* p)()=my func;

  TRACE(size=%d/n ,sizeof(p));

  }

  };

  调用Call函数,查看指针是否为8字节长。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • vs2015打包安装程序,vs2015程序打包,VS2022实现VC++打包生成安装文件图文详细历程
  • vc++6.0的快捷键,vc 快捷键
  • vc++6.0的快捷键,vc 快捷键,VC6.0常用快捷键大全
  • 绘制圆角矩形的方法,c++ 画矩形,C#画圆角矩形的方法
  • 懒汉式和饿汉式代码,单列模式懒汉和饿汉,C++单例模式的懒汉模式和饿汉模式详解
  • 好用的C++编译器,c++编译软件哪个好
  • semaphore c#,c++ semaphore
  • semaphore c#,c++ semaphore,C++中Semaphore内核对象用法实例
  • dev-c++使用教程,dev c++安装教程
  • dev-c++使用教程,dev c++安装教程,Dev C++ 安装及使用方法(图文教程)
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针,简单总结C++中指针常量与常量指针的区别
  • com组件初始化失败,c#开发com组件,C++中COM组件初始化方法实例分析
  • c++静态成员变量使用,c++静态成员函数和静态成员变量
  • c++静态成员变量使用,c++静态成员函数和静态成员变量,详解c++ 静态成员变量
  • 留言与评论(共有 条评论)
       
    验证码: