JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Probleme mit Vererbung...
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 07.10.2004, 15:34    Titel: Probleme mit Vererbung... Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
xardias
JLI Master


Alter: 39
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 07.10.2004, 16:37    Titel: Antworten mit Zitat

probiere doch mal den operator=( char[] ) in deiner string klasse zu definieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 07.10.2004, 17:01    Titel: Antworten mit Zitat

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). Sad

Oder muss ich die Operatoren in "Path" neu implementieren?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 07.10.2004, 17:19    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 07.10.2004, 18:13    Titel: Antworten mit Zitat

geht denn das:?

string s1="Path\\...";

Path path = s1;
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 07.10.2004, 19:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 07.10.2004, 19:49    Titel: Antworten mit Zitat

dann werden wohl Operatoren nicht vererbt?
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 07.10.2004, 21:12    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 10.10.2004, 14:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 10.10.2004, 16:58    Titel: Antworten mit Zitat

VerruecktesHuhn hat Folgendes geschrieben:
UGDString& operator =( UGDString s ); // A = s[/code]


Das sollte ja klar sein Wink
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 Wink
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
xardias
JLI Master


Alter: 39
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 11.10.2004, 11:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 11.10.2004, 13:01    Titel: Antworten mit Zitat

Wenn ers mit dem STL-String macht, dann könnte er es ja auch explizit angeben Razz
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 11.10.2004, 16:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 11.10.2004, 17:49    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 11.10.2004, 18:10    Titel: Antworten mit Zitat

Na da hatte ich wohl wieder Recht! Razz

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...Wink
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum