首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个错误捕获有关问题

2012-03-11 
一个异常捕获问题!代码如下:#include iostream#include cctype#include fstream#include string#i

一个异常捕获问题!
代码如下:

#include <iostream>
#include <cctype>
#include <fstream>
#include <string>
#include <stdexcept>
using   std::cout;
using   std::cin;
using   std::endl;
using   std::string;
using   std::ios;
using   std::invalid_argument;

int   main(int   argc,char*   argv[]){
try{
if(argc!=3)
throw   invalid_argument( "Input   and   output   file   names   required. ");
const   string   source=argv[1];
const   string   target=argv[2];
if(source==target)
throw   invalid_argument(string( "Cannot   copy   ")+string(source)+string( "   to   itself. "));
std::ifstream   in(source.c_str(),ios::in|ios::binary);
if(!in)
throw   ios::failure(string( "Input   file   ")+string(source)+string( "   not   found "));
std::ifstream   temp(target.c_str(),ios::in|ios::binary);
char   ch=0;
if(temp){
temp.close();
cout < <endl < < "exists,do   you   want   to   overwrite   it?   (y   or   n): ";
ch=cin.get();
if(toupper(ch)!= 'Y ')
return   0;
}
std::ofstream   out(target.c_str(),ios::out|ios::binary|ios::trunc);
while(in.get(ch))
out.put(ch);
if(in.eof())
cout < <endl < <source < < "   copied   to   " < <target < < "   successfully. ";
else
cout < <endl < < "Error   copying   file. ";
return   0;
}
catch(std::exception&   ex){
cout < <endl < <typeid(ex).name() < < ": " < <ex.what();
return   1;
}
}

如果输入的参数正常,程序能正常运行;如果参数不对,则catch(std::exception&   ex)却不能捕获到invalid_argument类型的异常;但exception类是所有标准异常类的基类啊,为什么还不能捕获invalid_argument类型的异常呢,请各位高手指点,谢谢!!!

[解决办法]
那就是说invalid_argument 不是从exception派生的呗。自己打开头文件找找invalid_argument 的定义看看。

热点排行