C++ Identische Codes liefern verschiedene Ergebnisse

d0zer

Lt. Commander
Registriert
Aug. 2007
Beiträge
1.039
Hallo Leute,


ich hänge gerade an einem echt seltsamen Problem.

Ich habe eine Methode die mir einen String aus einem Stringstream zurückgeben soll.

Das mache ich mit x.str();

Zuvor wird aus einer Textdatei alles in den Stringstream eingelesen.

Soweit so gut. Nun habe ich das gleiche komplette Programm nochmals erstellt(neues Projekt, dann Copy Paste und auch die Textdateien kopiert) und nun wird mir der String nicht mehr zurück gegeben. Ich kriege keine Fehlermeldung, nichts. An der Stelle, wo der Text angezeigt werden sollte ist einfach nichts.

Muss ich irgendeinen Puffer leeren?

Arbeite mit Visual Studio 2012.

Hoffe ihr könnt mir helfen. Danke schon mal :)
 
Dachte es ist eher eine Visual Studio Einstellung etc.

Die Infos stecken in einer map<string, Episode>.

Edith: Der Text der ausgegeben werden soll, steckt in einer Textdatei in einem Bereich der mit <FLASHBACK> und </FLASHBACK> markiert ist.

Meine Methode die den String zurück geben sollt:


Code:
string Episode::getFlashback() const
{
	stringstream inhalt, flashback;
	inhalt << this->inhalt;    //Inhalt wird in der Main eingelesen, besteht also schon.
	stringstream inhalt2;
	inhalt2 << inhalt;
	string temp;

	while( inhalt2.good() )
	{
		getline(inhalt2, temp, ' ');

		if( temp.find( "<FLASHBACK>" ) != string::npos )
		{
			getline(inhalt2, temp, ' ');

			while( inhalt2.good() && temp.find( "</FLASHBACK>" ) == string::npos ) 
			{									
				flashback << temp << " ";
				getline(inhalt2, temp, ' ');
			}
			
			flashback << endl << endl;
		}
	}
	return flashback.str();
}


Und hier der Aufruf in der Main:

der Iterator ruft die Methode getFlashback der Klasse Episode auf.

Code:
cout << it->second.getFlashback();



Das Problem ist halt, dass der identische Code, einmal funzt und einmal nicht.

Danke nochmals :)
 
Zuletzt bearbeitet:
Du liest doch bestimmt an einer Stelle eine Datei ein? Öffnest du die eventuell über einen relativen Pfad? Möglicherweise hast du im ersten Projekt das working directory anders konfiguriert als im 2.?
 
Oh Mann ...

Vielleicht kannst du uns ja mal deine main() zeigen ... das wirkt irgendwie gerade alles so reingeschmissen ...

Ich vermute jetzt auch mal pauschal Pfadprobleme (oder die Textdateien werden von VS nicht per default in den Output-Ordner mitkopiert)
 
Zuletzt bearbeitet:
Die Datei liegt im Projektordner, wo sich auch die cpp, header Dateien etc. befinden.

Im Grunde ist es kein Hexenwerk. Die Einstellungen sind bei beiden Projekten identisch. Also einen falschen Pfad, kann ich ausschließen.

Ich habe auch eine Methode, welche den gesamten Inhalt, also auch um die Flashbacks herum einließt und die Ausgabe des gesamten Inhalts funktioniert seltsamerweise bei beiden Projekten.

Code:
int main()
{
	
	string NummerBuffer, DeutschBuffer, EnglishBuffer, InhaltBuffer, muell;
	multimap <string, Episode> episoden;
	int eingabe = 0;
	string anzeige = "";

	fstream inFile("Lost_Staffel_1.txt", ios::in);
	if(!inFile){
		cerr << "Datei konnte nicht geöffnet werden."<< endl;
		exit(1);
	}

	getline(inFile, muell, '\n'); //Erste Zeile wird nicht benötigt

	while(!inFile.eof())
	{
		getline(inFile, muell, ' '); //Nicht benötigter Text
		getline(inFile, NummerBuffer, '\n');
		getline(inFile, DeutschBuffer, '(');
		getline(inFile, EnglishBuffer, ')');
		getline(inFile, InhaltBuffer, '*');
		getline(inFile, muell, '\n'); //Nicht benötigter Text

		Episode Buffer(NummerBuffer, DeutschBuffer, EnglishBuffer, InhaltBuffer);
		episoden.insert(make_pair(NummerBuffer, Buffer));
	}	



{
				cin >> anzeige;
				auto it = episoden.find(anzeige);
				if (it == episoden.cend())
					cout << "Kein entsprechnder Eintrag gefunden!";
				else
				{
					cout << endl;
					cout << it->second.getFlashback();
				}
 
d0zer schrieb:
Die Datei liegt im Projektordner, wo sich auch die cpp, header Dateien etc. befinden.

Ich habe jetzt kein VS hier auf dem Rechner, aber ich glaube nicht, daß das das working directory ist, wenn du das Programm aus der IDE heraus laufen läßt.

Trotzdem, warum steppst du nicht einfach mal im Debugger durch?? Das wäre doch 100 mal simpler und schneller als hier auf Antworten zu warten.
 
d0zer schrieb:
Die Datei liegt im Projektordner, wo sich auch die cpp, header Dateien etc. befinden.
Im Grunde ist es kein Hexenwerk. Die Einstellungen sind bei beiden Projekten identisch. Also einen falschen Pfad, kann ich ausschließen.
Ich habe auch eine Methode, welche den gesamten Inhalt, also auch um die Flashbacks herum einließt und die Ausgabe des gesamten Inhalts funktioniert seltsamerweise bei beiden Projekten.

Vermutlich irgend eine nicht initialisierte Variable in der Klasse 'Episode'. Das ganze scheint ungeheuer kompliziert angelegt für den intendierten Zweck. Schon das Einlesen der Datei 'Lost_Staffel_1.txt' sieht atemberaubend aus.

Wie sieht denn so eine Textdatei aus und was ist der Sinn des ganzen Programms?

Außerdem ist die Reihenfolge der values bei gleichem key in einer multimap nicht definiert.
 
Zuletzt bearbeitet:
blöderidiot schrieb:
Vermutlich irgend eine nicht initialisierte Variable in der Klasse 'Episode'. Das ganze scheint ungeheuer kompliziert angelegt für den intendierten Zweck. Schon das Einlesen der Datei 'Lost_Staffel_1.txt' sieht atemberaubend aus.

Das habe ich auch gedacht. Aber zum Lernen der Untiefen von C++ gar nicht so schlecht, denke ich ...

Ich kann auf Anhieb keinen Fehler sehen.
Vielleicht wenn du mal die komplette Klassendefinition (cpp + h) und ein Beispiel der .txt posten könntest, würde ich es mal ausprobieren ... von mir aus auch das Projekt als .zip per PM
 
ich lass dir später eine .zip zukommen.
bin gerade nur mit Handy unterwegs. tausend dank.

irgendwie denke ich liegt es an meinem visual Studio. 2 identische Projekte, eins geht, eins nicht.

sogar das händische anlegen eines neues Projekts und pures Copy paste des codes hat nichts gebracht. somit dürften ja auch Altlasten wegfallen beim kopieren von Dateien denk ich mal.
 
Zum Teufel noch mal, hast du's inzwischen einfach mal debuggt?? Das ist doch unglaublich, daß manche hier lieber Stunden lang rumeiern, anstatt einfach mal das elementarste Problemsuchetool überhaupt anzuwenden! VS hat nicht um sonst einen der mächtigsten und komfortabelsten Debugger der Welt im Bauch.
 
Zuletzt bearbeitet:
@antred: Wenn er vertraut mit einem Debugger wäre, hätte er das Problem vermutlich schon selbst identifiziert...
 
Zurück
Oben