2015-04-19 18 views
6

Tür adını istisnalar kullanarak yazdırmaya çalışıyorum, ancak programım bunun istisnayı yakalama gibi görünmüyor ve bunun yerine varsayılan sonlandırma işlevini çağırıyor gibi görünüyor. Neyi özledim?Bu program neden bir istisna yakalayamıyor?

#include <cstdio> 
#include <exception> 
#include <typeinfo> 

namespace Error 
{ 
    template<typename T> 
    class Blah : std::exception 
    { 
     virtual const char* what() const throw() 
     { 
      return typeid(T).name(); 
     } 
    }; 
} 

void blah() { 
    throw Error::Blah<int*********>(); 
} 

int main() 
{ 
    try 
    { 
     blah(); 
    } 
    catch (std::exception& e) 
    { 
     std::puts(e.what()); 
    } 
} 

cevap

10

sorun buradadır: özel (kalıtım varsayılan olarak private ve bir belirtici katmayan class beri)

template<typename T> 
class Blah : std::exception 
//   ^^^^^^^^^^^^^^^ 

Sen miras, o yüzden std::exception bir değil erişilebilir taban. Herkese miras almalısın.

İlgili konular