C++常见错误调试LNK2019\LNK2001\LNK2005\error C2533\0xcdcdcd

逻辑错误

#include<iostream>
#include<String>
#include<vector>

#include<algorithm>
#indude<cmath>
using namespace sid;
inline void keep_window_open( char ch; cin>> ch;)

int main()

{

 

vector<double> temps;            //the temperatue
 double temp = 0;
 double sum =0;
 double low_temp =-1000;
 double high_temp = 1000;

 int no_of_temp = 0;

 while(cin>>temp)
 { 
  ++ no_of_temp;
  if(temp > high_temp)   high_temp = temp;
  if(temp < low_temp ) low_temp = temp;
  
 }
 cout<<"The average of the temprature is"<< sum/no_of_temp <<endl;
 cout<<"The high temperature is "<< high_temp <<endl;
 cout<<"The low temperature is "<< low_temp <<endl;

 keep_window_open();
 return 0;
}

 关于虚基类

在使用虚基类时我们会根据自己的需要实现该虚基类中的成员,但是如果基类中出现的虚函数没有添加”=0“在连接时会导致LNK2001:external unresolved external symbol "you function name@****"。

关于magic number

在调试的时候经常会遇到一些奇怪的十六进制数据

比如 0xcdcdcd 这是微软VS默认给未初始化的数据分配的地址

 关于error Cxxxx

warning C4200: 使用了非标准扩展 : 结构/联合中的零大小数组

error C2229: class“****”有非法的大小为零的数组。在声明时不要讲数组的大小忘了,不要声明array[],若想声明一个变长的数组可以考虑用指针,数组一定是array[length]。

error 2533:'identifier' : constructors not allowed a return type。构造函数不能有返回值类型,即便是void都是不可以的。如果类后面的括号忘记写了,那类就会被视作函数,跟在包含头文件后面的构造函数被默认添加int返回值类型,造成了这个错误。这个都是小问题,但是在不注意的情况下就很容易产生,而且不容易发现哦。

错误描述:
e:/mywork/1.7sp1/ginfo/client/src/skdesigner/dsgquerydlg.h(295) : error C2259: 'CDsgFormatDataMgrDlg' : cannot     instantiate abstract class due to following members:
e:/mywork/1.7sp1/ginfo/client/src/skdesigner/dsgformatdatamgrdlg.h(14) : see declaration of 'CDsgFormatDataMgrDlg'

error C2146: m_***前缺少;

error C4330: 默认类型为int,***

出现以上错误一部分原因是类并没有声明就被使用了

第二种情况是在使用该类的时候发生了互包含的情况即class A的头文件包含了class B的头文件,同时在class B的头文件中又包含了class A的头文件。
 
错误原因:
一个实现类继承了一个抽象基类,但是却没有把抽象基类中的方法全部实现。

error C3861 :algorithm\LineIntersector?.cpp(671) : error C3861: 'fmax': identifier not found 

VC++实现的是C89而fmax函数是C99的标准函数,故找不到,改为std::max;如果还是报同样的错误就在C++/preprocessor中添加NOMINMAX宏,或者这样写:(std::max)。因为VC++中自定义了max的宏,而std中的max是函数,你还可以考虑使用VC++中的_cpp_max()来替换。


关于error LNKxxx

error LNK2019: 无法解析的外部符号 "public: void __thiscall Cube::CCubeView::clearMsg(void)" (?clearMsg@CCubeView@Cube@@QAEXXZ),该符号在函数 "private: void __thiscall Cube::CubeControl::Control(unsigned int,int,int)" (?Control@CubeControl@Cube@@AAEXIHH@Z) 中被引用

在类的头文件中有声明,但是没有实现。也许你忘了在实现文件中给这个函数添加类限定符原本为Type Class***::Function(),却写成了Type Function()了,而且在其它函数中已经使用了这个函数。

遇到这种情况原因有二个,简单点说:

其一:某个方法只是在.h里面声明,没有在cpp里面实现。造成这个的原因会有很多种,上面也列举了一种。

其二:声明和实现都有了,但是没有添加到vs的虚拟工作目录下面,这时候如果在其他.cpp引用的话就报这个错(来自http://blog.csdn.net/yhhwatl/article/details/9237739)


error LNK2001

error LNK2001: 无法解析的外部符号 "public: virtual int __thiscall Cube::CubeControl::HasChanged(unsigned int *,int *)" (?HasChanged@CubeControl@Cube@@UAEHPAIPAH@Z)

在类的头文件中有声明,但是没有实现。也许你忘了在实现文件中给这个函数添加类限定符原本为Type Class***::Function(),却写成了Type Function()了

如果使用extern关键字的变量出现这类错误,

.obj : error LNK2001: 无法解析的外部符号 "struct _RTL_CRITICAL_SECTION _mutex_conn" (?_mutex_conn@@3U_RTL_CRITICAL_SECTION@@A)

是因为在实现文件,即Cpp文件里面没有声明该变量。

error LNK2001 unresolved external symbol __imp___CrtDbgReportW

编译一个Debug版本时,出现如题的链接错误提示
可以在VS2010 项目->属性->C/C++->Code Generation中的Runtime Libiary 中设置为 Multi-threaded Debug DLL (/MDd)可以保证编译通过,并且可以在本地运行,如果将该软件放在另一种版本的系统中,则会出现 无法找到msrv100d.ll的错误提示

所以最好在 项目->属性->C/C++->Preprocessor 中将Preprocessor Definitions 中的_Debug项删除

C++程序开发调试常见问题解决方法

程序启动后无反应报异常

1、先查看机器性能是否有所变化,打开任务管理器看看内存与CPU的使用情况;

2、查罗辑,步进调试,看代码运行的步骤是否与自己设想的相吻合;

3、查输入,如果数据出现异常导致程序的异常,可以修改输入的数据。


内存泄漏

内存泄漏就是运行时分配出去的内存在程序销毁时无法被回收。

导致这个问题的原因多种多样,但是如何具体到哪一行代码产生泄漏这是一个难题。

你可能感兴趣的:(C++,c,error,Visual,LNK2001,LNK2005,LNK2019)