逻辑错误
#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、查输入,如果数据出现异常导致程序的异常,可以修改输入的数据。
内存泄漏
内存泄漏就是运行时分配出去的内存在程序销毁时无法被回收。
导致这个问题的原因多种多样,但是如何具体到哪一行代码产生泄漏这是一个难题。