1.链接时出错
在调用未定义的函数时会出错的。
而具有相同名称但是类型不同的函数并不会被匹配。
比如如果我们需要:
int area(int x,int y)
{
…
}
则double area(double x,double y){…}
和int area(char x,char y){…}都是不会被匹配的。
2.异常
基本思想:把错误检测(在被调函数中完成)和错误处理(在主调函数中完成)分离。
如果一个函数发现一个自己不能处理的错误,它不是正常的返回,而是进行抛出一个异常来表示错误的发生。
函数使用太try语句来对异常进行处理:把所要处理的异常情况罗列在catch语句之后。
runtime_error:
包含一个字符串,可以被错误处理函数使用。
例如,错误处理函数error(s)可以被写成:
void error(string s)
{
throw runtime_error(s);
}
当我们想处理runtime_error时,只要捕捉到它就行了。
例如:
int main()
try{
....//所要运行的主程序
return 0;//0表示成功
}
catch(runtime_error&e)//&表示我们希望以引用的方式传递异常
{
cerr<<"runtime_error:"<<e.what()<<'\n';//cerr与cout的用法相似,只是它是专门用于错误的输出的,其中e.what()将从runtime_error中提取出错误信息
keep_window_open();
return 1;//1表示失败
}
对于runtime_error和out_of_range这两种异常,其二者的公共基类是exception,因此,当写成:
catch(exception&e)
{
...
}
这样就可以捕捉这两种类型的异常了。
一般来说,当返回值为0则表示main()成功完成了,而非0的返回值则表示某些错误发生了