Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

leerer return

Empfohlene Antworten

Veröffentlicht

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

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?

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.
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?
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?
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.

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?

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.