Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

31

22.06.2007, 19:21

Es ist doch so offensichtlich, dass man es garnicht mehr verfehlen kann...

Zitat von »"Faule Socke"«


Dann habe ich den Zuweisungsoperator wie folgt verändert:

C-/C++-Quelltext

1
virtual const CString<T>    &operator = (CString<T> *pRight);



Wenn du wirklich einen C-String zuweisen willst (var="text"; ) dann musst du (vorausgesetzt T==char) die Parameterliste folgendermaßen gestalten:

C-/C++-Quelltext

1
virtual const CString<T>    &operator = (CString<T>& pRight);


wobei das p für eine Referenz wenig passend ist ;)

// €dit

mir will nicht ganz einleuchten, warum dieser Operator virtual sein soll?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

32

22.06.2007, 19:33

C-/C++-Quelltext

1
CString<T>    &operator =    ( const CString<T>& pRight);


C-/C++-Quelltext

1
2
3
4
template<typename T>bool    operator ==    ( const CString<T> &pLeft, const CString<T> &pRight);
template<typename T>bool    operator !=    ( const CString<T> &pLeft, const CString<T> &pRight);

template<typename T>CString< T >& operator +=    (CString<T> &pLeft, const CString<T> &pRight); 


So. Allerdings würde ich += eher in der Klasse definieren und nicht global.
@D13_Dreinig

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

33

22.06.2007, 21:51

David_pb
zwei Seiten vorher hast du ihm noch nen externen += operator vorgecodet :P

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

34

23.06.2007, 05:30

Zitat von »"grek40"«

David_pb
zwei Seiten vorher hast du ihm noch nen externen += operator vorgecodet :P


Mist... ;) Ja, kann man machen. Aber +=, -=, *=, /=, ... sollten als imo lieber Membermethoden sein, weil links ohnehin nur das Objekt steht.
@D13_Dreinig

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

35

25.06.2007, 14:44

Hi,

das Problem was ich vorher gepostet habe, ist inzwischen behoben.

Zu dem Memoryleak:

C-/C++-Quelltext

1
2
3
4
5
6
//! Kopierkonstruktor

// Alle Zeiger auf NULL setzen und den Zähler zurücksetzen

m_pcString      =   NULL;
m_pcOldString   =   NULL;
m_uiArrayLength =   0;
CreateString(pOther.m_pcString);

Ist es so besser?

Ich aberbeite zur Zeit daran, alle Funktionen auf const-correctness umzustellen.

David
Du hast ja gesagt, man kann Templateklassen nicht in Dlls exportieren.
Wie mache in des denn dann mit den Deklarationen der Methoden?


Und noch eine kleine frage, an alle die sich das Projekt schon mal angeschaut haben:
Soll ich alles was in der Namespace String ist in die Namespace Core verschieben?
Die Klasse CBuffer werde ich sowieso wieder löschen(und sowas ähnliches in die Namespace File machen.)
Also wären in der String-Namespace nur noch 2 Funktionen und die Stringklasse.
Was meint ihr?

Ankündigung für die nächste Version:
Das Code der die const-correctness nicht einhält im müll landet hat mich schon etwas erschrekt.
Ich werde deshalb für Version 1.0.0.5 alle Klassen korrigieren.
Ausserdem hab ich schon eine Factory hinzugefügt, so wird die Funktion CreateDevice wohl(komisches wort) überflüssig.
Am device hab ich auch ein paar kleine änderungen gemacht.
Am Netzwerkteil werd ich in dieser Version wohl nix machen.
Ausserdem werde ich die Stringklasse vollständig dokumentieren.


Socke

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

36

25.06.2007, 14:57

Zitat von »"Faule Socke"«

Hi,

das Problem was ich vorher gepostet habe, ist inzwischen behoben.

Zu dem Memoryleak:

C-/C++-Quelltext

1
2
3
4
5
6
//! Kopierkonstruktor

// Alle Zeiger auf NULL setzen und den Zähler zurücksetzen

m_pcString      =   NULL;
m_pcOldString   =   NULL;
m_uiArrayLength =   0;
CreateString(pOther.m_pcString);

Ist es so besser?


Im copy c'tor ist es arg schwer ein Memoryleak zu verursachen! ;-) Es ging in erster Linie um die Methode InitPtrs, welche die Zeiger auf 0 setzt und dann versucht den Speicher freizugeben.

Zitat von »"Faule Socke"«


David
Du hast ja gesagt, man kann Templateklassen nicht in Dlls exportieren.
Wie mache in des denn dann mit den Deklarationen der Methoden?


Bei Klassentemplates lieferst du den kompletten Sourcecode mit. Ansonsten verwendest du __declspec( export ) (für MSVC).

Zitat von »"Faule Socke"«


Und noch eine kleine frage, an alle die sich das Projekt schon mal angeschaut haben:
Soll ich alles was in der Namespace String ist in die Namespace Core verschieben?
Die Klasse CBuffer werde ich sowieso wieder löschen(und sowas ähnliches in die Namespace File machen.)
Also wären in der String-Namespace nur noch 2 Funktionen und die Stringklasse.
Was meint ihr?


Könntest du machen. Muss du selbst wissen wie's dir am besten gefällt! :-)
@D13_Dreinig

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

37

25.06.2007, 15:20

Zitat von »"David_pb"«

Bei Klassentemplates lieferst du den kompletten Sourcecode mit.


Wie meinst du das? muss ich das alles in den Header schreiben?


Socke

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

38

25.06.2007, 15:32

jop, so macht man das ;)

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

39

25.06.2007, 15:33

Zitat von »"grek40"«

jop, so macht man das ;)


Ich bin begeistert. Das chaos will ich sehen.


Socke

EDIT
Muss das in die klasse oder kann ich das auch dahinter schreiben?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

40

25.06.2007, 15:36

Dann trenns und inkludier die Datei am ende des Headers:

Header.h

C-/C++-Quelltext

1
2
3
4
5
6
7
template< typename XYZ >
class foo
{
  // Deklarationen

};

#include "Header.inc"


Header.inc (oder sonst eine Endung)

C-/C++-Quelltext

1
// Definitionen
@D13_Dreinig

Werbeanzeige