Hallo,
ich habe mir mal die Funktionalität von spätem Binden angeschaut und weiss leider einfach nicht, was ich bei meinem kleinen Nachmachversuch falsh mache.
Mein Frage: Warum wird mir beim Ausführen immer der Text: "std::exception" angezeigt und nicht, wie gewollt "Hello". Ich dachte durch das Schlüsselwort "virtual" vor der "what"-Methode würde ich für diese das späte Binden aktivieren und es würde der Programmcode in "myException::what() throw()" ausgeführt. Stattdessen habe ich aber das Gefühl, es würde der Code von "exception::what() throw()" ausgegeben.
Dies geschieht auch, wenn die die Definition und Deklaration von "Test() throw(exception)" auf "Test() throw(myException)" ändere, aber ich denke der Fehler bzw. die Ursache liegt eher woanders.
Vielen Dank für die Hilfe.
MFG
mozi
Klasse mit MAIN-Methode:
Header dieser Klasse:
Klasse "myException"
Header von "myException"
ich habe mir mal die Funktionalität von spätem Binden angeschaut und weiss leider einfach nicht, was ich bei meinem kleinen Nachmachversuch falsh mache.
Mein Frage: Warum wird mir beim Ausführen immer der Text: "std::exception" angezeigt und nicht, wie gewollt "Hello". Ich dachte durch das Schlüsselwort "virtual" vor der "what"-Methode würde ich für diese das späte Binden aktivieren und es würde der Programmcode in "myException::what() throw()" ausgeführt. Stattdessen habe ich aber das Gefühl, es würde der Code von "exception::what() throw()" ausgegeben.
Dies geschieht auch, wenn die die Definition und Deklaration von "Test() throw(exception)" auf "Test() throw(myException)" ändere, aber ich denke der Fehler bzw. die Ursache liegt eher woanders.
Vielen Dank für die Hilfe.
MFG
mozi
Klasse mit MAIN-Methode:
C++:
#include "Test.h"
#include <exception>
#include "myException.h"
#include <iostream>
using namespace std;
Test::Test() throw(exception) {
string e_str = "hello";
throw myException(e_str);
}
Test::~Test() {
}
int main(int argc, char **argv) {
try {
Test* t = new Test();
}
catch (exception& e) {
printf("%s", e.what());
}
}
C++:
#ifndef TEST_H_
#define TEST_H_
#include <exception>
#include "myException.h"
using namespace std;
class Test
{
public:
Test() throw (exception);
virtual ~Test();
};
#endif /*TEST_H_*/
C++:
#include "myException.h"
myException::myException(std::string& message)
{
this->message = message;
}
const char* myException::what() throw()
{
return message.c_str();
}
myException::~myException() throw()
{
}
C++:
#ifndef EXCEPTION_H_
#define EXCEPTION_H_
#include <exception>
#include <string>
using namespace std;
class myException : public std::exception {
public:
myException(string& msg);
virtual const char* what() throw();
virtual ~myException() throw();
private:
string message;
};
#endif /*EXCEPTION_H_*/
Zuletzt bearbeitet von einem Moderator: