[英]can't catch an exception from a function in c++
就像標題所說,我無法捕捉到函數拋出的異常。 它只是說“在拋出一個tocccli :: InvalidParametersError *的實例后終止調用”
try{
cmd_parameters = parse_cmd(argc, argv);
}
catch (InvalidParametersError e){
// blablabla
}
拋出異常的函數
std::vector<CmdParam> parse_cmd(int argc, char* argv[]){
for (int i = 1; i < argc; ++i)
{
if (argv[i][0] == '-')
{
//blablala
}
else
{
if (result.empty())
{
throw new InvalidParametersError(
"First parameter have to be an option (e.g. starts with a dash)");
}
result.back().arguments.push_back(argv[i]);
}
}
return result;
}
該函數位於名為tocccli的命名空間內我是否遺漏了什么?
不要在parse_cmd()
使用new
關鍵字:
std::vector<CmdParam> parse_cmd(int argc, char* argv[]){
for (int i = 1; i < argc; ++i)
{
if (argv[i][0] == '-')
{
//blablala
}
else
{
if (result.empty())
{
throw InvalidParametersError( // <-- No new keyword here
"First parameter have to be an option (e.g. starts with a dash)");
}
result.back().arguments.push_back(argv[i]);
}
}
return result;
}
通過const引用捕獲:
try{
cmd_parameters = parse_cmd(argc, argv);
}
catch (const InvalidParametersError& e){
// blablabla
}
您正在拋出一個指向InvalidParametersError的指針,並按值捕獲。 考慮將你的投擲改為:
throw InvalidParametersError("First parameter have to be an option (eg starts with a dash)");
正如@pmr所指出的,還要考慮使用const ref
try {
cmd_parameters = parse_cmd(argc, argv);
} catch (const InvalidParametersError &e) {
// ....
}
只需在catch塊中添加&符號,然后在catch塊中完成。
catch (InvalidParametersError &e)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.