'da özel özel durumlar oluşturma C++ öğreniyorum ve kendi özel durumumu oluşturmaya ve bunları Linux'a atmaya çalıştığımda yaşıyorum.C++
Uygulamamı sınamak için küçük bir test projesi oluşturdum ve aşağıda istisna sınıf başlık dosyam var.
class TestClass : public std::runtime_error
{
public:
TestClass(char const* const message) throw();
virtual char const* what() const throw();
};
istisna sınıf için kaynak dosya benim ana uygulamasında
using namespace std;
TestClass::TestClass(char const* const message) throw()
: std::runtime_error(message)
{
}
char const * TestClass::what() const throw()
{
return exception::what();
}
, benim durum atar ve aşağıdaki gibi bir try/catch bunu yakalar bir işlev arıyorum geçerli:
void runAFunctionAndthrow();
/*
*
*/
int main(int argc, char** argv) {
try
{
cout << "About to call function" << endl;
runAFunctionAndthrow();
}
catch (TestClass ex)
{
cout << "Exception Caught: " << ex.what() << endl;
}
return 0;
}
void runAFunctionAndthrow()
{
cout << "going to run now. oh dear I need to throw an exception" << endl;
stringstream logstream;
logstream << "This is my exception error. :(";
throw TestClass(logstream.str().c_str());
}
Ben şu çıktıyı almak için bekliyorum çalıştırın:
About to call function
Going to run now. oh dear I need to throw an exception
Exception Caught: This is my exception error. :(
yerine ne alıyorum
About to call function
going to run now. oh dear I need to throw an exception
Exception Caught: std::exception
Bildirim yerine benim gerçek istisna mesajının std :: istisna diyor son çizgidir "Bu benim özel durum hatadır".
Bu neden, Windows üzerinde tamam çalışıyor, ancak Linux'ta bunu yapıyor.
Yaptığımdan farklı yayınlarda gördüğüm şey doğruydu, bu yüzden neyi kaçırdım?
"what()" ifadesinde, muhtemelen runtime_error :: what(); --- ifadesini yeniden göndermeyi reddedeceğiniz anlamına gelir (burada temel sınıf davranışı sizin için zaten iyidir). –