Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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);

};

Geschrieben

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.

Geschrieben


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?

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

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

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

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

Geschrieben

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?

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

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