wulfgang Geschrieben 4. Februar 2009 Teilen Geschrieben 4. Februar 2009 Hallo, ich wollte eigentlich eine Methode schreiben, die einen Wert für andere Klassen und die aufrufende Umgebung zugänglich macht. Die Methode zum Ausgeben wird auch aufgerufen. Es wird jedoch nicht der Wert von servername ausgegeben. In read_serverlist.cpp wchar_t* read_serverlist::servername; read_serverlist::read_serverlist(void) { servername=nameserver; wcout << servername; //Hier wird servername noch richtig ausgegeben } wchar_t *read_serverlist::give_data(void) { cout << "test"; //test wird ausgegeben return servername; //wird nicht ausgegeben } In read_serverlist.h #pragma once class read_serverlist { public: read_serverlist(void); static wchar_t *read_serverlist::give_data(void); static wchar_t *servername; public: ~read_serverlist(void); }; in aufrufender Umgebung: wcout << read_serverlist::servername << " Das sollte der Severname sein";//Hier wird nichts ausgegeben Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 4. Februar 2009 Teilen Geschrieben 4. Februar 2009 Du kopierst da Zeiger durch die Gegend, aber ist auch sicher, dass das, worauf dieser Zeiger zeigt, zu dem Zeitpunkt, zu dem du es abfragst, überhaupt noch gültig ist? Was genau ist denn nameserver? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 4. Februar 2009 Autor Teilen Geschrieben 4. Februar 2009 Was genau ist denn nameserver? read_serverlist::read_serverlist(void) { GetPrivateProfileString(szSectionName, szKeyName_s, DefaultValue, nameserver, (sizeof(nameserver))/(sizeof(wchar_t)), szFilename); servername=nameserver; wcout << servername; //Hier wird servername noch richtig ausgegeben } nameserver ist also ein String aus eine ini-Datei. aber ist auch sicher, dass das, worauf dieser Zeiger zeigt, zu dem Zeitpunkt, zu dem du es abfragst, überhaupt noch gültig ist? nameserver ist wohl nicht mehr gültig? Dann muss ich nameserver auch global und statisch definieren? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 4. Februar 2009 Teilen Geschrieben 4. Februar 2009 nameserver ist wohl nicht mehr gültig? Keine Ahnung. Aus dem gezeigten Code lässt sich weder der Typ noch Scope noch Speicherklassenspezifizierer von nameserver entnehmen. Es wird wohl ein wchar_t-Array als Klassenmember sein. Dann muss ich nameserver auch global und statisch definieren?Die Reaktion auf solche Probleme sollte nie sein, dass man irgendwelche Variablen statisch oder global macht. Das ist ein Designproblem. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 4. Februar 2009 Autor Teilen Geschrieben 4. Februar 2009 Keine Ahnung. Aus dem gezeigten Code lässt sich weder der Typ noch Scope noch Speicherklassenspezifizierer von nameserver entnehmen. War so sehr darin vertieft, dass ich daran nicht gedacht habe Es wird wohl ein wchar_t-Array als Klassenmember sein. Ja: read_serverlist::read_serverlist(void) { wchar_t nameserver[256]; GetPrivateProfileString(szSectionName, szKeyName_s, DefaultValue, nameserver, (sizeof(nameserver))/(sizeof(wchar_t)), szFilename); servername=nameserver; wcout << servername; //Hier wird servername noch richtig ausgegeben .. } Die Reaktion auf solche Probleme sollte nie sein, dass man irgendwelche Variablen statisch oder global macht. Das ist ein Designproblem. Ist kein guter Stil, ich weiß. Aber wie denn sonst? Müsste ich nameserver als Eigenschaft der Klasse in der Headerdatei deklarieren? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 4. Februar 2009 Teilen Geschrieben 4. Februar 2009 Ja: Nein. Das ist eine lokale Variable in read_serverlist. Adressen von lokalen Variablen dürfen den Scope der Variablen nicht verlassen. Ist kein guter Stil, ich weiß. Aber wie denn sonst? Müsste ich nameserver als Eigenschaft der Klasse in der Headerdatei deklarieren?Kommt drauf an. Wie soll diese Klasse denn benutzt werden? Stecken überhaupt Designentscheidungen dahinter, dass manche Member static sind und andere nicht? Oder machst du nach und nach alles static, woran du gerade nicht anders herankommst? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 4. Februar 2009 Autor Teilen Geschrieben 4. Februar 2009 Wie soll diese Klasse denn benutzt werden? Der Wert von servername soll in einer anderen Klasse in einer Methode verwendet werden. In diesem Fall möchte ich ,dass eine Methode in einer Klasse Connect den Wert verwendet, um eine Verbindung zu einem Server herzustellen.Das gleiche gilt für andere Werte. die ich mit GetPrivateProfileString aus der Ini-datei einlese. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 4. Februar 2009 Teilen Geschrieben 4. Februar 2009 Das gleiche gilt für andere Werte. die ich mit GetPrivateProfileString aus der Ini-datei einlese. Hast du für jeden Wert so eine Klasse? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 4. Februar 2009 Autor Teilen Geschrieben 4. Februar 2009 Nein, die Werte zu einer kompletten Sektion werden alle im Konstruktor von meiner Klasse read_serverlist eingelesen. Wäre es nicht eine Lösung, dass ich für jede Sektion ein Objekt erschaffe und dass in diesem Objekt dann die eingelesenden Eigenschaften gespeichert werden? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.