16. august 2008 - 19:24
Der er
11 kommentarer og 1 løsning
throw (exception)
Hej Eksperter. Jeg har et problem med throw (exception) Jeg har en exception klasse: class OvSocketException { public: OvSocketException(); void OvSocketExceptionSet(const std::string& message) {msg = message;} const std::string& OvSocketGetError() const {return msg;} private: std::string msg; }; Jeg har en klasse hvor jeg skal bruge exception klassen: class OvSocket { public: somefunc private: OvSocketException OvEx }; Fejlen sker i somefunc: somefunc { std::string msg; if(...) { throw OvEx.OvSocketExceptionSet(msg) <- fejlen er her.... } } compileren siger: ‘((OvSocket*)this)->OvSocket::OvEx’ does not have class type Hvad gør jeg forkert?
Annonceindlæg fra HPE
16. august 2008 - 21:38
#1
OvSocketExceptionSet returnerer void
16. august 2008 - 21:39
#2
prøv: if(...) { OvEx.OvSocketExceptionSet(msg); throw OvEx; }
16. august 2008 - 22:01
#3
Jeg har nu prøvet at udkommentere throw og lave OvEx.OvSocketExceptionSet(msg), men jeg får fejlen: error: ‘((OvSocket*)this)->OvSocket::OvEx’ does not have class type Kan det være en fejl i min Makefile?
16. august 2008 - 23:12
#4
Følgende compiler fint her: #include <string> class OvSocketException { public: OvSocketException(); void OvSocketExceptionSet(const std::string& message) {msg = message;} const std::string& OvSocketGetError() const {return msg;} private: std::string msg; }; class OvSocket { public: void somefunc(); private: OvSocketException OvEx; }; void OvSocket::somefunc() { std::string msg = "bla bla"; OvEx.OvSocketExceptionSet(msg); throw OvEx; }
18. august 2008 - 10:56
#5
Lav en constructor der tager din string som parameter, noget lignende (utestet): class OvSocketException { public: OvSocketException(); OvSocketException(const std::string& message) {msg = message;} void OvSocketExceptionSet(const std::string& message) {msg = message;} const std::string& OvSocketGetError() const {return msg;} private: std::string msg; }; Så kan du lave noget som throw OvEx("oh noes!");
18. august 2008 - 12:50
#6
Mener du ikke 'throw OvSocketException("oh noes!");'? Det ville nok være nemmere at bruge de predefinerede STL-klasser. De har allesammen også den fordel at de kan fanges i den samme catch-blok. #include <stdexcept> bool somefunc(int *param) { try { if(param == 0) throw std::invalid_argument("'param' er ugyldigt"); if(noget gejl med en socket fejler) throw std::runtime_error("sucker socket"); } catch(std::invalid_argument &ia) { // ikke en alvorlig fejl return false; } catch(std::exception &e) { // alvorlig fejl throw; } }
19. august 2008 - 12:08
#7
Doh, Ja jeg mente throw OvSocketException("oh noes!");
30. august 2008 - 01:55
#8
oddi ?
30. august 2008 - 13:37
#9
sry jeg fik lige meget travlt! jeg kigger på det i dag eller i morgen. Tak for tålmodigheden.
28. oktober 2008 - 03:13
#10
?
28. oktober 2008 - 08:44
#11
Smid svar arne
28. oktober 2008 - 14:12
#12
OK
Kurser inden for grundlæggende programmering