Zum Inhalt springen

leerer return


wulfgang

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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?
Link zu diesem Kommentar
Auf anderen Seiten teilen

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?
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...