2012-04-15 5 views
0

Ich bin in diese Situation geraten, die ich wirklich schwierig finde. Ich habe 2 Klassen: Zeit12 und Zeit24, die Zeit auf einer 12 Stunden und 24 Stunden jeweils beibehalten. Beide sollen individuelle Konvertierungsfunktionen haben, um Konvertierungen zum anderen Typ zu ermöglichen. Aber wenn ich zuerst Zeit 12 deklariere, dann ist die "Zeit24" im Prototyp der Umwandlungsfunktion undefiniert, da die Klasse time24 später deklariert wird. Was mache ich jetzt? Ich kann es nicht nur nach innen erklären und nach der 2. Klasse definieren. Also was nun?Tricky Situation mit Konvertierungsfunktionen?

class time12 
{ 
operator time24() //time24 is undefined at this stage 
{ 

} 
}; 

class time24 
{ 

}; 
+0

Und welche Sprache arbeiten Sie mit? –

Antwort

1

Normalerweise in C++ haben Sie 2 Arten von Dateien, .h und .cpp. Ihre .h-Datei ist Ihre Deklaration und .cpp ist Ihre Definition.

Beispiel:

convtime.h:

#ifndef CONVTIME_H_ //this is to prevent repeated definition of convtime.h 
#define CONVTIME_H_ 

class time24; //for the operator in class12 

class time12 
{ 
public: 
    time12(int); //constructor 
    operator time24(); 
private: 
    //list your private functions and members here 
} 

class time24 
{ 
public: 
    time24(int); //constructor 
private: 
    //list your private functions and members here 
} 

#endif //CONVTIME_H_ 

convtime.cpp:

#include "convtime.h" 

//constructor for time12 
time12::time12(int n) 
{ 
    //your code 
} 

//operator() overload definition for time12 
time24 time12::operator() 
{ 
    //your code 
} 

//constructor for time24 
time24::time24(int n) 
{ 
    //your code 
} 
2

Sie können die Klasse deklarieren, ohne es in C zu definieren ++:

class time24; 

class time12 
{ 
operator time24() //time24 is undefined at this stage 
{ 

} 
}; 

class time24 
{ 

}; 
+0

ich wusste das nicht, danke – Nirvan

0

Sie keine Sprache angegeben haben - , wenn Sie mit einer dynamischen typisierten Sprache wie Python zu tun haben, ther uvb nein ein solches Problem - die andere Art benötigt nur zur Ausführungszeit bekannt sein, wenn die Umwandlung Methode aufgerufen wird - nicht bei Parse (kompilieren) Zeit - so der folgende Code gilt:

class Time12(Time): 
    def toTime24(self): 
     return Time24(self._value) 

class Time24(Time): 
    def toTime12(self): 
     return Time12(self._value) 

Wenn die Methode "toTime24" aufgerufen wird, wird der globale Name "Time24" als die richtige Klasse definiert.

In C++ - Sie können eine Klasse Stummel deklarieren, die sehr ähnlich wie Funktionsprototyp funktioniert - gerade tun:

class time24; 

class time12 
{ ... } 

class time24 
{ ... } 

nicht sicher, wie dies in anderen statisch typisierten Sprachen.

+0

Ok - gerade sah man jetzt die Sprache an der Spitze der Frage, nicht als ein Tag - wie auch immer, ich werde diese Antwort als ein Beispiel halten, wie die Dinge in der dynamischen Typisierung arbeiten Welt. – jsbueno

+0

Proomed die Antwort auf Wiki, so können Menschen aus anderen statischen Sprachen (Java, C#) hinzufügen, wie es dort gemacht wird – jsbueno