[ERLEDIGT] exit im Klassenkonstruktor



  • Hallo Leute,
    kann es sein dass man im Klassenkonstruktor kein exit() benutzen darf?

    Nachtrag:
    Ich bekomme zb bei

    exit(1)
    

    den Fehler:

    error C3861: 'exit': identifier not found
    


  • Du solltest generell keine exit() benutzen.



  • Janjan schrieb:

    Du solltest generell keine exit() benutzen.

    Funktioniert es dennoch?
    Wie macht man es besser? Exceptions?



  • Hier ist der Code:
    Header:

    #ifndef EDGE_H
    #define EDGE_H
    
    class Edge{
    
    	private:
    		unsigned int startknot_id,endknot_id,rightface_id,leftface_id;
    		bool has_startknot_id,has_endknot_id;
    	public:
    		Edge(unsigned int new_knot);
    		...
    

    CPP:

    #include "edge.h"
    
    Edge::Edge(unsigned int new_knot_id){
    
    	if(has_startknot_id && has_endknot_id){
    		exit(12);
    	}
    	else if(has_startknot_id ){
    		{set_endknot_id(new_knot_id);
    	}
    	else{
    		set_startknot_id(new_knot_id);
    	}
    }
    

    In keiner Methode der Klasse kann ich exit benutzen.
    Bei anderen Klassen klappt es einwandfrei. Habs eben probiert.
    Neustart hilft auch nichts.
    Vielleicht übersehe ich ja etwas.



  • Da fehlt die cstdlib. Allerdings macht man das wirlich besser mit Exceptions.



  • drakon schrieb:

    Da fehlt die cstdlib. Allerdings macht man das wirlich besser mit Exceptions.

    Wieso geht es in allen anderen Klassen? Da nutze ich ebenfalls keine <cstdlib>



  • darkfate schrieb:

    drakon schrieb:

    Da fehlt die cstdlib. Allerdings macht man das wirlich besser mit Exceptions.

    Wieso geht es in allen anderen Klassen? Da nutze ich ebenfalls keine <cstdlib>

    Vielleicht hast du dort einen anderen Header, der diese indirekt inkludiert.

    Aber dennoch: exit sollte man nicht einsetzen (Oder man liebt allgemein Schleudersitze, und das Risiko).



  • Na gut, dann stelle ich mich auf Exceptions um... 🙂



  • darkfate schrieb:

    class Edge{
    
    	private:
    		unsigned int startknot_id,endknot_id,rightface_id,leftface_id;
    		bool has_startknot_id,has_endknot_id;
    	public:
    		Edge(unsigned int new_knot);
    		...
    
    #include "edge.h"
    
    Edge::Edge(unsigned int new_knot_id){
    	
    	if(has_startknot_id && has_endknot_id){
    		exit(12);
    	}
    	else if(has_startknot_id ){
    		{set_endknot_id(new_knot_id);
    	}
    	else{
    		set_startknot_id(new_knot_id);
    	}
    }
    

    Das ergibt keinen Sinn. Du willst im Konstruktor auf die Werte von unitialisierten Membervariablen prüfen? Wozu?



  • Janjan schrieb:

    darkfate schrieb:

    class Edge{
    
    	private:
    		unsigned int startknot_id,endknot_id,rightface_id,leftface_id;
    		bool has_startknot_id,has_endknot_id;
    	public:
    		Edge(unsigned int new_knot);
    		...
    
    #include "edge.h"
    
    Edge::Edge(unsigned int new_knot_id){
    	
    	if(has_startknot_id && has_endknot_id){
    		exit(12);
    	}
    	else if(has_startknot_id ){
    		{set_endknot_id(new_knot_id);
    	}
    	else{
    		set_startknot_id(new_knot_id);
    	}
    }
    

    Das ergibt keinen Sinn. Du willst im Konstruktor auf die Werte von unitialisierten Membervariablen prüfen? Wozu?

    Gute Frage 🙂 ... ein Copy & Paste Fehler. Mittlerweile ist das ganze Konstrukt weg. Danke für den Hinweis, ich schau mir mal die anderen Klassen an.


Anmelden zum Antworten