读书人

一个错误捕获有关问题

发布时间: 2012-03-11 18:15:38 作者: rapoo

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

#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 的定义看看。

读书人网 >C++

热点推荐