Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
VerruecktesHuhn Super JLI'ler

Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 07.10.2004, 15:34 Titel: Probleme mit Vererbung... |
|
|
Hi!
immer wieder die Probleme mit den Grundlagen...
Also, da jetzt meine Stringklasse einwandfrei funktioniert, hab ich mich entschlossen eine Pathklasse von ihr abzuleiten, die dann eben spezielle Methoden zur Pfadmanipulation bereitstellt. Ich hab ihr keinen Konstruktor oder Operatoren gegeben, nur vier Methoden. Jetzt wollte ich das in meinem Programm so verwenden:
[code]
Path Pfad = "Root\\Folder\\Name.Extension";
[\code]
Ich hab gedacht, dass das Funktioniert, da ich in der Stringklasse einen Konstruktor "String( const char* cstr )" und einen Zuweisungsoperator "String& String::operator =( String s )" implementiert habe.
Der Kompiler sagt allerdings das diese Konvertierung (von "char[]" nach "Path") nicht gültig sei.
Was hab ich bei der Vererbung falsch gemacht?[code][/code] |
|
Nach oben |
|
 |
xardias JLI Master

Alter: 39 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 07.10.2004, 16:37 Titel: |
|
|
probiere doch mal den operator=( char[] ) in deiner string klasse zu definieren. |
|
Nach oben |
|
 |
VerruecktesHuhn Super JLI'ler

Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 07.10.2004, 17:01 Titel: |
|
|
In der Stringklasse hab ich mit den ganzen Aktionen keine Probleme:
Ich hab alle Operatoren mit String Argumenten implementiert ("String& String::operator =( String s )") und einfach einen Konstruktor für C-Strings implementiert. So wird jeder C-String in einen String umgewandelt mit dem dann die Operation ausgeführt wird. Das Problem scheint irgendwie daran zu liegen, dass "Path" die in "String" implementierten Operationen nicht gescheit übernimmt (obwohl richtig vererbt wurde und VC in der Klassenansicht die richtigen Operatoren anzeigt).
Oder muss ich die Operatoren in "Path" neu implementieren? |
|
Nach oben |
|
 |
HotAcid Super JLI'ler

Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 07.10.2004, 17:19 Titel: |
|
|
wie wärs denn mit
Code: |
Path pfad("C:\blabla.txt");
|
_________________ StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht. |
|
Nach oben |
|
 |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 07.10.2004, 18:13 Titel: |
|
|
geht denn das:?
string s1="Path\\...";
Path path = s1; _________________ The source of all power is in its destiny... |
|
Nach oben |
|
 |
VerruecktesHuhn Super JLI'ler

Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 07.10.2004, 19:44 Titel: |
|
|
Nein, geht weder das von Millenium, noch das von Hot Acid... vieleicht liegts dann gar nicht an der Vererbung sondern an was anderm... ? |
|
Nach oben |
|
 |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 07.10.2004, 19:49 Titel: |
|
|
dann werden wohl Operatoren nicht vererbt? _________________ The source of all power is in its destiny... |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 07.10.2004, 21:12 Titel: |
|
|
TheMillenium hat Folgendes geschrieben: | dann werden wohl Operatoren nicht vererbt? |
Doch, das werden sie soweit ich weiß schon.
Aber ich glaube, das ist das selbe Problem wie bei den Konstruktoren. Wenn man einen parameterisierten Konstruktor in der Basisklasse einbaut, dann muss man in der abgeleiteten Klasse auch so einen Konstruktor einbauen.
Aber kannst du vielleicht mal die Implementierungen zeigen? _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
 |
VerruecktesHuhn Super JLI'ler

Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 10.10.2004, 14:03 Titel: |
|
|
Code: |
class UGD_API UGDString : public UGDVariable
{
protected:
// attributes:
char* m_sString; // the data storage
public:
// data retrieval:
char* GetData(); // get the data
// constructors and destructor:
UGDString(); // standart constructor
UGDString( const char* c ); // c-string constructor
UGDString( float f ); // float constructor
UGDString( UGDString& s ); // copy constructor
~UGDString(); // destructor
// operators:
UGDString operator +( UGDString s ); // A + s
UGDString operator -( UGDString s ); // A - s
UGDString& operator =( UGDString s ); // A = s
UGDString& operator +=( UGDString s ); // A += s
UGDString& operator -=( UGDString s ); // A -= s
bool operator <( UGDString s );
bool operator >( UGDString s );
bool operator ==( UGDString s );
bool operator <=( UGDString s );
bool operator >=( UGDString s );
operator double() const { return atof( m_sString ); } // float f = A
};
class UGD_API UGDPath : public UGDString
{
public:
// methods:
UGDString GetRoot();
UGDString GetName();
UGDString GetDirectory();
UGDString GetExtension();
};
|
|
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 10.10.2004, 16:58 Titel: |
|
|
VerruecktesHuhn hat Folgendes geschrieben: | UGDString& operator =( UGDString s ); // A = s[/code] |
Das sollte ja klar sein
Der einzige Zuweisungsoperator, den du definiert hast, empfängt als Parameter UGDString. Wenn du dann einen char[] zuweisen willst, dann schafft er es nicht, den in die Klasse UGDString umzuwandeln.
Also, versuch mal einen Operator zu definieren, der entweder mit std:string oder mit chararrays arbeitet  _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
 |
xardias JLI Master

Alter: 39 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 11.10.2004, 11:07 Titel: |
|
|
mit std::string würds auch nix bringen. Du müsstes schon nen operator = überladen, der const char* akzeptiert.
oder du weißt den String so zu:
Code: | Path Pfad = UGDString("Root\\Folder\\Name.Extension"); |
|
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 11.10.2004, 13:01 Titel: |
|
|
Wenn ers mit dem STL-String macht, dann könnte er es ja auch explizit angeben
Code: | Path Pfad = std::string("Root\\Folder\\Name.Extension"); |
Ich bin mir aber gerade nicht sicher, ob der Compiler das nicht vllt. sogar selber schafft. Aber notfalls wie gesagt einfach ein chararray. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
 |
VerruecktesHuhn Super JLI'ler

Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 11.10.2004, 16:42 Titel: |
|
|
Hi!
Also mit meiner Stringklasse gehen ALLE diese operationen:
Code: |
UGDString s = "Dummer Test String";
s += ", der aber Funktioniert.";
s -= "Dummer ";
s = 1.075;
// usw.
|
Nur eben nicht mit meiner Pathklasse, obwohl die ja eigentlich alles vererbt bekommen haben müsste... ? |
|
Nach oben |
|
 |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 11.10.2004, 17:49 Titel: |
|
|
Warum nimmt du nicht einfach friend blabla und machst die Stringklasse als public in Path? _________________ The source of all power is in its destiny... |
|
Nach oben |
|
 |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 11.10.2004, 18:10 Titel: |
|
|
Na da hatte ich wohl wieder Recht!
Zitat: | Besitzt die Basisklasse einen Kopierkonstruktor, wird dieser nicht automatisch vererbt. Der Kopierkonstruktor der Basisklasse kann durch einen Initialisierer aufgerufen werden |
Wäre ja auch sonst etwas unlogisch wegen dem this Pointer... _________________ The source of all power is in its destiny... |
|
Nach oben |
|
 |
|