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

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

11

28.07.2003, 16:23

@_progger_
bei deiner funktion wird sogesehen gar nix übergeben sondern dein #define kram wird in die zeile reinkopiert wo du es aufrufst (auf Textbasis wird es reinkopiert vor den compilieren), drum wird da nix übergeben :)

12

28.07.2003, 16:28

jaja, das ist mir schon klar.

Aber

Quellcode

1
2
3
4
5
void *memcpy( void *dest, const void *src, size_t count ); 
-------------------------------------------------------------------------------

char *Text = "Hallo": 
memcpy(Text, "Bello", 6); 

Text wird nur als einfacher Zeiger übergeben und dürfte demnach nicht zu verändern sein, oder was?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

13

28.07.2003, 16:51

Zitat von »"_progger_"«

Text wird nur als einfacher Zeiger übergeben und dürfte demnach nicht zu verändern sein, oder was?

Richtig! Der Zeiger wird ja auch nicht verändert. Nur der Speicherbereich, auf den er zeigt. Das ist ein gewaltiger Unterschied!

14

30.07.2003, 03:18

Also ich hab es so gemacht

Quellcode

1
2
3
4
5
6
7
8
template <class I> void SafeRelease(I*& pInterface)
{
  if(pInterface)
  {
     p->Release();
     p = 0;
  }
}
Dann geht es mit jeder Klasse die die Funktion Release() haben, und der Pointer wird gleich auf NULL gesetzt.

PS: Jetzt geht es wircklich nett mehr Allgemeiner. Des weiteren ist es die C++ Umsetzung der #define Anweisung.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

15

30.07.2003, 11:53

Wieso heisst dieser Thread "Hardcore C++ Coder"??????
ebah rutangiS reniem ni relheF 01 rebü hci ssad, etniem latkraF!

16

30.07.2003, 11:58

Zitat von »"DragonMaster"«

Also ich hab es so gemacht

Quellcode

1
2
3
4
5
6
7
8
template <class I> void SafeRelease(I*& pInterface)
{
  if(pInterface)
  {
     p->Release();
     p = 0;
  }
}
Dann geht es mit jeder Klasse die die Funktion Release() haben, und der Pointer wird gleich auf NULL gesetzt.

PS: Jetzt geht es wircklich nett mehr Allgemeiner. Des weiteren ist es die C++ Umsetzung der #define Anweisung.


Warum bei "I*& pInterface", "*" und "&"?
Ein Gespenst geht um in Europa...

17

30.07.2003, 13:52

Wieso funktioniert das nicht. (Hab noch nicht viel Ahnung von Templates)

Prototyp

Quellcode

1
2
template<class T> FEExport FEResult FESafeRelease(T **PointerToRelease); //Führt ein sicheres
                                                                         //Release aus


Definition

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//***************************************************************************************
//Führt ein sicheres Realese aus
template<class T> FEExport FEResult FESafeRelease(T **PointerToRelease)
{
    if(*PointerToRelease != NULL)
    {
        *PointerToRelease->Release();
        PointerToRelease = NULL;
    }
    else
        return FEError;

    return FEOk;
}
//***************************************************************************************
Ein Gespenst geht um in Europa...

teichgraf

Frischling

Beiträge: 26

Wohnort: Neu New York

Beruf: Studi

  • Private Nachricht senden

18

30.07.2003, 20:48

Zitat von »"_progger_"«

Zitat von »"DragonMaster"«

Also ich hab es so gemacht

Quellcode

1
2
3
4
5
6
7
8
template <class I> void SafeRelease(I*& pInterface)
{
  if(pInterface)
  {
     p->Release();
     p = 0;
  }
}
Dann geht es mit jeder Klasse die die Funktion Release() haben, und der Pointer wird gleich auf NULL gesetzt.

PS: Jetzt geht es wircklich nett mehr Allgemeiner. Des weiteren ist es die C++ Umsetzung der #define Anweisung.


Warum bei "I*& pInterface", "*" und "&"?


Es wird eine Referenz auf einen Zeiger übergeben. Nicht der Adressoperator. Sieht ein wenig verwirrend aus, ist aber Speicher sparender.

Wie sind denn die Fehlermeldungen zu deinem Template? Kann es sein, dass dein Rückgabesatus der Funktion eigentl. FEOK und net FEOk ist?
See ya...
TeichGraf.exit(0);
$HOME

19

30.07.2003, 23:17

Des weiteren, ein Template kann man nett Exportieren. "FEExport" ist daher fehl am Platze.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

20

31.07.2003, 15:54

ok, das Problem hat sich gelöst. Man muss Templates direkt sichtbar coden, also nicht in cpps. So ein sch...

@teichgraf: Das heißt schon FEOk. Und mit einem Fehler á la nichtdeklarierter Bezeichner käme ich schon zurecht :-D
Ein Gespenst geht um in Europa...

Werbeanzeige