Поймать конкретное исключение по имени cpp - PullRequest
0 голосов
/ 29 июня 2018

Я использую pcl 1.7 код отслеживания и в некоторых случаях этот метод:

tracker_->compute ();

Дает мне эти ошибки:

[pcl :: ApproxNearestPairPointCloudCoherence :: initCompute] PointCloudCoherence :: Ошибка инициализации. [pcl :: ApproxNearestPairPointCloudCoherence :: compute] Ошибка инициализации.

Теперь я знаю, что выдается ошибка, и я хотел бы отловить именно эту ошибку, чтобы сообщить программе, что делать, если эта ошибка возникает. Я пытался так:

  try
  {
    tracker_->compute ();
  }
  catch (...)
  {
    std::cout<<"inside the exception"<<std::endl;
  }

Чтобы отловить все ошибки, но это не сработало ..... А также с

catch(pcl::ApproxNearestPairPointCloudCoherenceException &e) 

моя программа даже не компилировалась ....

Так есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 29 июня 2018

Я просмотрел источник , чтобы найти место, где возникла ошибка, и обнаружил , что в вашем конкретном случае она увеличивается на

if (!PointCloudCoherence<PointInT>::initCompute ())
{
    PCL_ERROR ("[pcl::%s::initCompute] PointCloudCoherence::Init failed.\n", getClassName().c_str());
    return (false);
}

так что вы видите, здесь нет throw xxx, а есть только макрос , который скрывает от нас фактическую обработку ошибок.


Чтобы выяснить, что именно происходило, я искал определение PCL_ERROR, и в результате поиска было определено, что оно определено в файле print.h как

#define PCL_ERROR(...)   pcl::console::print (pcl::console::L_ERROR, __VA_ARGS__)

с pcl::console::print функцией просто печать ошибка, а не выброс исключение.


Итак, вы не можете отловить ошибку, потому что это не исключение , а скорее всего простой текст, записанный в консоль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...