Zugriff auf gespeicherten CString-vector von verschiedenen Klassen

rainer82

Grünschnabel
Ich stecke noch in den Kinderschuhen was allgemein und besonders objekt orientierte Programmierung angeht.

Eine Teilaufgabe meines Programmes ist es einen Extensionfilter von Dateien zu basteln und gueltige Dateinamen dann abzuspeichern. Hierfuer habe ich mich mit der vector Klasse begnuegt.
Code:
void CImageLists::CreateListOfFiles(CString path) //Aufruf aus DLG Klasse
{
	CFileFind	 fFinder;
	CString	 fExtension;

	fFinder.FindFile(path +_T("\\*.*"));

	while (fFinder.FindNextFile()) 
		{
			fExtension=fFinder.GetFileName();
			//Extension filter
			if(fExtension.Right(3)=="jpg" || fExtension.Right(2)=="dv" || fExtension.Right(3)=="bmp")
				{
					fNames.push_back(fFinder.GetFileName());
				}
		}
	return;
}

Das klappt soweit ganz gut.

Nun moechte ich allerdings den Vector erst wieder verwenden, wenn der Benutzer ein neues Ereignis ausloest (Button klickt) wo die Dateinamen benoetigt werden. Muss also den Vector global machen. Wie geht das?

In C++ ist mir das klar. Ich definiere die Variable oder was auch immer einfach ausserhalb der main. aber wie sieht es nun hier aus? Ich koennte den Vektor in einer gemeinsamen header Datei ablegen, so dass der Vektor dann von verschiedenen Stellen (Klassen) zu verschieden Zeiten zugaenglich ist.
Dies scheint mir aber kein sehr eleganter Weg.

Wie sieht es mit Veererbung aus? Steige nicht ganz hinter wie das funktioniert.

Fuer Tips waehre ich sehr dankbar.
 
Zuletzt bearbeitet:

vfl_freak

Premium-User
Moin,

irgendwie ist mir nicht klar, was Du genau meinst ... :confused:

Du hast scheinbar Deinen vector hier auch schon relativ global definiert (zumindest nicht in der geposteten Funktion) .....

Nur sind globale Variablen i. d. R. nicht unproblematisch! Du solltest sie immer als Parameter an eine Funktion übergeben!

Was meinst Du denn in diesen Zushg. mit "Vererbung"

Gruß
Klaus
 

rainer82

Grünschnabel
Danke fuer die Antwort. Allein fuer die Schilderung meines Problems muss ich mich ziehmlich konzentrieren. :)
Nun ja, es geht mir darum eine Liste von Dateinamen mit der Funktion
Code:
void CImageLists::CreateListOfFiles(CString path)
zu erzeugen. Diese Liste wird dann z.B. von einer anderen Funktion z. B.
Code:
CImageHandler::CreateMatrixOfFile(std::vector<CString> fNames)
benoetigt, wie diesen Fall, zum aufrufen der Dateien und Konvertierung der Images in eine Matrix.

Die Erstellung der Liste soll aber separat erfolgen, da die Liste auch von anderen Funktionen benoetigt wird. Ich moechte also die Liste nach Erstellung speichern wodurch sie damit dann fuer den weitern Programmablauf zugaenglich wird.
Muss ich dies tun, in dem ich die Liste in eine XML- oder TXT-Datei ablege und diese Datei bei Bedarf auslese? Gibt es da nicht andere Wege oder ist dies der eleganteste Weg?

Rainer
 
Zuletzt bearbeitet:

vfl_freak

Premium-User
Ich moechte also die Liste nach Erstellung speichern wodurch sie damit dann fuer den weitern Programmablauf zugaenglich wird.
Muss ich dies tun, in dem ich die Liste in eine XML- oder TXT-Datei ablege und diese Datei bei Bedarf auslese? Gibt es da nicht andere Wege oder ist dies der eleganteste Weg?

Moin,

solange Du diese Liste nur für den aktuellen Programmlauf benötigst, musst Du sie gar nicht speichern ! !
Sie wird ja in der entsprechenden Variablen im Speicher gehalten. Musst sie nur halt an die entspr. Stellen übergeben!

Andernfalls müsstest Du sie ja jedesmal, wenn Du drauf zugreifen willst, erneut auslesen ..... :-(
Speichern musst Du eigentlich nur dann, wenn sie nach dem nächsten Programmstart noch benutzt werden soll ! !

Allerdings kenne ich diese CImageList auch nicht. Liese sich das nicht mit Vektoren oder ähnlichen Containern eleganter lösen

Gruß
Klaus