Mehrdeutiges Symbol?

UncleBob

Mitglied
Habe wieder mal ein kleines Problemchen, ich vermute mal dass das irgendwie mit meinen Compileroptionen oder meinen Includedirectories zu tun haben könnte...

Der Syntax wieder mal sehr unspektakulär, der Fehler tritt bereits bei der Initialisierung auf:

ofstream mOutFile("StarTry", ios::eek:ut);

Das ist alles. Zieht einen Rattenschwanz von Fehlermeldungen nach sich die etwa so aussehen:

Code:
1>e:\orbiter\mods\msss\orbitersdk\samples\stargen source\es_system.cpp(185) : error C2872: 'ofstream': Mehrdeutiges Symbol
1>        kann 'c:\programme\microsoft platform sdk\include\crt\fstream.h(118) sein: ofstream'
1>        oder "c:\programme\microsoft visual studio 8\vc\include\iosfwd(713) : std::ofstream"
1>e:\orbiter\mods\msss\orbitersdk\samples\stargen source\es_system.cpp(185) : error C2872: 'ios': Mehrdeutiges Symbol
1>        kann 'c:\programme\microsoft platform sdk\include\crt\ios.h(106) sein: ios'
1>        oder "c:\programme\microsoft visual studio 8\vc\include\iosfwd(698) : std::ios"

dasselbe wenn ich fstream verwende. Was kann ich dagegen tun?
 
Hi,

also wenn ich das richtig verstehe dann kann er sich zwischen den beiden libs nicht entscheiden.
und bestimmt steht da auch noch irgendwo ein

Code:
using namespace std;

Also ich tippe mal es müsste so aussehen:
Code:
std::ofstream mOutFile("StarTry", ios::out);

um
c:\programme\microsoft visual studio 8\vc\include
zu benutzen.
 
Die meisten deiner Vermutungen scheinen richtig zu sein, allerdings behebt das anscheinend das Problem nicht.

Mitlerweile sieht die Definition so aus:

std::eek:fstream mOutFile("StarTry", std::ios::eek:ut);

Und das hat mit den Mehrdeutigkeiten auch tatsächlich aufgeräumt. Bleiben aber immer noch ein paar Problemchen die ich vorhin darauf zurückgeführt hatte dass die Initialisierung nicht klappt, aber da bin ich wohl falsch gelegen, denn sie sind immer noch da:

Code:
1>e:\orbiter\mods\msss\orbitersdk\samples\stargen source\es_system.cpp(185) : error C2079: 'mOutFile' verwendet undefiniertes class 'std::basic_ofstream<_Elem,_Traits>'
1>        with
1>        [
1>            _Elem=char,
1>            _Traits=std::char_traits<char>
1>        ]
1>e:\orbiter\mods\msss\orbitersdk\samples\stargen source\es_system.cpp(185) : error C2078: Zu viele Initialisierungen

(Beide Fehler beziehen sich auf die Initialisierungszeile)

Edit:

Wenn ich eine leere Argumentliste mitliefere funktioniert die Initialisierung, also:

std::eek:fstream mOutFile();

Allerdings scheint das meine Probleme immer noch nicht zu lösen, weil die weiteren Fehler beim Arbeiten mit dem Ding bestehen bleiben. Die nächste Zeile sieht so aus:

mOutFile<<endl<<"; === Configuration file for the "+ Name +" solar system ===\n";

und produziert die folgenden Fehler:

Code:
1>e:\orbiter\mods\msss\orbitersdk\samples\stargen source\es_system.cpp(190) : error C2563: Listen der formalen Parameter stimmen nicht überein
1>e:\orbiter\mods\msss\orbitersdk\samples\stargen source\es_system.cpp(190) : error C2568: '<<': Auflösung der Funktionsüberladung nicht möglich

Ausserdem bekomme ich anschliessend eine ähnliche Meldung wie oben, die zwar nicht als Fehler gewertet wird, aber trotzdem etwas beunruhigend ist da sie aus dem ostream header selbst kommt:

Code:
1>        c:\programme\microsoft platform sdk\include\crt\ostream.h(144): kann 'ostream &endl(ostream &)' sein
1>        c:\programme\microsoft visual studio 8\vc\include\ostream(977): oder "std::basic_ostream<_Elem,_Traits> &std::endl(std::basic_ostream<_Elem,_Traits> &)"
1>        with
1>        [
1>            _Elem=wchar_t,
1>            _Traits=std::char_traits<wchar_t>
1>        ]
1>        c:\programme\microsoft visual studio 8\vc\include\ostream(969): oder "std::basic_ostream<_Elem,_Traits> &std::endl(std::basic_ostream<_Elem,_Traits> &)"
1>        with
1>        [
1>            _Elem=char,
1>            _Traits=std::char_traits<char>
1>        ]
1>        c:\programme\microsoft visual studio 8\vc\include\ostream(943): oder "std::basic_ostream<_Elem,_Traits> &std::endl(std::basic_ostream<_Elem,_Traits> &)"
 
Zuletzt bearbeitet:
Hallo UncleBob,

erstell bitte mal ein vollständiges Minimalbeispiel, bei dem der Fehler auftritt. Mit lückenhaften Informationen (nur Codefragmente und Fehlermeldungen) können wir dir nur unzureichend helfen.

Grüße, Matthias
 
voila:

Code:
#pragma once

#include "stdio.h"
#include "sstream"
#include "iostream.h"
#include "fstream.h"

using namespace std;

void main()
{

	std::ofstream mOutFile();

	mOutFile<<endl<<"this sucks!";

}

Habe ein Projekt erstellt das nur aus einer cpp-datei mit exakt diesem Code besteht, und es spuckt mir dieselben Fehler aus... Irgendwie ist mir das nicht ganz geheuer.

Edit: sorry, ganz vergessen das error-log anzuhängen:

Code:
1>------ Neues Erstellen gestartet: Projekt: Project1, Konfiguration: Debug Win32 ------
1>Die Zwischen- und Ausgabedateien für das Projekt "Project1" mit der Konfiguration "Debug|Win32" werden gelöscht.
1>Kompilieren...
1>DingsBums.cpp
1>e:\empty spaces\c++stuff\stargen\project1\dingsbums.cpp(15) : error C2563: Listen der formalen Parameter stimmen nicht überein
1>e:\empty spaces\c++stuff\stargen\project1\dingsbums.cpp(15) : error C2568: '<<': Auflösung der Funktionsüberladung nicht möglich
1>        c:\programme\microsoft platform sdk\include\crt\ostream.h(144): kann 'ostream &endl(ostream &)' sein
1>        c:\programme\microsoft visual studio 8\vc\include\ostream(977): oder "std::basic_ostream<_Elem,_Traits> &std::endl(std::basic_ostream<_Elem,_Traits> &)"
1>        with
1>        [
1>            _Elem=wchar_t,
1>            _Traits=std::char_traits<wchar_t>
1>        ]
1>        c:\programme\microsoft visual studio 8\vc\include\ostream(969): oder "std::basic_ostream<_Elem,_Traits> &std::endl(std::basic_ostream<_Elem,_Traits> &)"
1>        with
1>        [
1>            _Elem=char,
1>            _Traits=std::char_traits<char>
1>        ]
1>        c:\programme\microsoft visual studio 8\vc\include\ostream(943): oder "std::basic_ostream<_Elem,_Traits> &std::endl(std::basic_ostream<_Elem,_Traits> &)"
1>Das Buildprotokoll wurde unter "file://e:\Empty Spaces\c++stuff\StarGen\Project1\Debug\BuildLog.htm" gespeichert.
1>Project1 - 2 Fehler, 0 Warnung(en)
========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========
 
Hallo UncleBob,

damit kann man gleich viel mehr anfangen :) Bei #include-Direktiven solltest du dich an folgende Punkte halten:
  • Dateien aus der Standardbibliothek nicht mit #include "header" einbinden, sondern mit #include <header>
  • Bei Headern aus der C++-Standardbibliothek keine Endung .h verwenden, also statt #include <header.h> besser #include <header>
Damit sollten die Fehlermeldungen verschwinden (hoffe ich zumindest, ich kann es grad nicht testen).

Grüße, Matthias
 
Ok. Durch das ersetzen von "fstream.h " durch <fstream> kann ich anscheinend alle anderen includes rausschmeissen ohne einen "nicht definierten Bezeichner" zu bekommen. Die oben gezeigten Fehlermeldungen bleiben aber leider trotzdem...
 
Hi,
C++:
#include <fstream>

int main()
{
    using namespace std;
	ofstream mOutFile("lol.txt");
	mOutFile<<endl<<"this sucks!";

	return 0;
}
funktioniert bei mir. Habe CodeBlocks mit MinGW.

mfg;)
 
Ja, mit dieser Initialisierung scheint das zu funktionieren. Hab zwar noch ne tonne fehler von strings, aber die werd ich mir morgen ankucken. Vielen Dank für die Hilfe!
 
Zurück