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.

global Vector

Empfohlene Antworten

Hallo,

ich möchte gerne einen vector mit strings global für Methoden verschiedener Klassen verfügbar machen. Wie mache ich das?Ein kleines Beispiel, was in der Header-und was in der Sourcedatei steht, wäre hilfreich.

Klappt schon fast. Es kommen noch 2 Fehler.

'transfer_data::dateinamen_xar' : illegal storage class

error C2071: 'transfer_data::dateinamen_xar' : illegal storage class

#pragma once

#include <vector>

#include <algorithm>

using namespace std;

class transfer_data

{

public:

	transfer_data(void);

	void exception_handling_Change_Directory(void);

	extern vector<string> dateinamen_xar; //beide Fehler beziehen sich 

                                                                 //auf diese Zeile


public:

	~transfer_data(void);

};

Wenn extern, dann nach dem using.

Wobei ich eher auf externe/globale Variablen verzichten würde. Implementier es lieber als Funktion in irgendeine Klasse und mach die notfalls static.

Edit:

const CBR ist natürlich eine sauberere Lösung.

Wenn extern, dann nach dem using

Funktioniert jetzt!

const CBR ist natürlich eine sauberere Lösung.

Was meinst du damit?


int _tmain(int argc, _TCHAR* argv[])

{

for(int i=0; i<dateinamen_ar.size(); i++)

cout << dateinamen_xar[i]<<"\n";

return 0;

}

Was muss ich in andere Sourcedateien noch einfügen, damit ich innerhalb von main auf dateinamen_xar zugreifen kann?

Was muss ich in andere Sourcedateien noch einfügen, damit ich innerhalb von main auf dateinamen_xar zugreifen kann?
Was du in anderen Sourcedateien änderst, hat darauf gar keinen Einfluss.

Du brauchst die Deklaration von dateinamen_xar, d.h. eine Includedirektive für den Header, der diese enthält.

Und wenn dateinamen_xar immer noch ein Member von transfer_data ist, brauchst du eine Instanz dieser Klasse.

Und wenn dateinamen_xar immer noch ein Member von transfer_data ist, brauchst du eine Instanz dieser Klasse.
Wieso? Ich dachte durch extern existiert dateinamen_xar unabhängig von der Klasse.

Ein Beispiel, was gemeint ist, würde weiterhelfen.

Wieso? Ich dachte durch extern existiert dateinamen_xar unabhängig von der Klasse.
Damit ein Member unabhängig von Instanzen der Klasse existiert, benutzt man static.

dateinamen_xar kann nicht gleichzeitig extern und Member sein, der Speicherklassenspezifizierer extern ist für Member nicht erlaubt. Es ergibt auch keinen Sinn. Ich weiß nicht, wo du extern hingeschrieben hast, aber solange dateinamen_xar ein nichtstatischer Member von transfer_data ist, gibt es kein dateinamen_xar ohne transfer_data.

Ein Beispiel, was gemeint ist, würde weiterhelfen.
Zu wissen, wie dein Code jetzt aussieht, würde weiterhelfen. Die letzte Meldung war "Funktioniert jetzt!", aber das stimmt ja offensichtlich nicht.

ich denke mit CBR und der anschliessende Parameterdeklaration ist gemeint:

call by reference (Aufruf über die Referenz), performanter beim Aufruf der Funktion, da keine Kopie der Datenstruktur angelegt werden muss, sondern nur eine 32/64-bittige Referenz an die Funktion übergeben wird.

Gegenstück dazu ist call by value, Vorteil ist, Datenstruktur kann ohne Orginal zu verändern editiert werden.

Die gesamten Merkmale erzählt Dir mit Sicherheit wiki oder google :D

Mit funktioniert jetzt, meinte ich. dass die Klasse an sich keine Fehler mehr verursacht. Ich muss diesen vector irgendwie für andere Klassen und die main verfügbar machen. Aber static ist ja offenbar nicht so gut.

Die einzige andere Lösung wäre dann ja den vector als member der Klasse und dann ein Objekt erschaffen, richtig?

Mit funktioniert jetzt, meinte ich. dass die Klasse an sich keine Fehler mehr verursacht.
Wie dein Code jetzt aussieht, weiß ich aber dadurch immer noch nicht.

Ich muss diesen vector irgendwie für andere Klassen und die main verfügbar machen. Aber static ist ja offenbar nicht so gut.
Static dient einem bestimmten Zweck. Die Art, wie du es benutzt, ist nicht gut. Du machst irgendwelche Variablen static, extern oder global, um damit deine hausgemachten Designprobleme zu lösen. Das ist nicht Sinn der Sache. Ob eine Variable static oder nicht ist, oder meinetwegen auch global, sollte das Ergebnis einer Designentscheidung sein, und nicht Lösung für ein Zugriffsproblem, verursacht durch nicht erfolgtes Design.

Das ist, als ob du beim Hausbau alle Steckdosen und Wasseranschlüsse im Keller angebracht hast, und jetzt Unmengen an Verlängerungskabeln und Schläuchen quer durch das ganze Haus ziehst, wo du eben gerade Strom oder Wasser brauchst. Kabel und Schläuche an sich sind nichts schlechtes, aber du behandelst damit nur die Symptome deines Problems.

Die einzige andere Lösung wäre dann ja den vector als member der Klasse und dann ein Objekt erschaffen, richtig?
Ganz ehrlich, die einzige richtige Lösung wäre IMHO Wegwerfen-Neumachen, aber diesmal mit einem ordentlichen objektorientierten Design. Du solltest dir diese Vorgehensweise abgewöhnen.

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.