probleme mit SaveData...
-
Folgendes Programm ( Ausschnitt ) ist mit dem Borland C++ Compiler erstellt worden, und ich soll es jetzt unter MS Visual Studio zum laufen kriegen.Ich hab alle Fehlermeldungen wegbekommen, nur diese macht mir noch etwas Sorgen, auch google weiß dazu nichts:
sprintf(tmp,"%d",t);
string number=tmp;
SaveData("Main"+number+".dat");Der ganze Ausdruck steht in einer Schleife mit t, und die Dateinamen sollen halt Main*.dat sein, wobei * durch den Wert von t ersetzt wird.
Das Problem ist die Zeile mit "SaveData...", weil da eine Variabel mitten in den String reinsoll.Mit "cout" wärs ja kein Problem, aber ich hab den Befehl SaveData noch nie verwendet und Hilfedateien etc schweigen sich zu diesem Thema aus.Wenn die Fehlermeldungen nötig sind, kann ich sie gern noch posten.Und wenn einer einen Beitrag, Link oder Stichwort zum googlen hat, ist mir auch schon geholfen

-
Ja, das wäre nicht schlecht - und eventuell auch die Signatur von SaveData() (mir ist keine ANSI-C++-Funktion mit dem Namen bekannt, also tippe ich auf eine Bibliotheksfunktion).
-
Da sind sie:
d:\Visual Studio Projekte\Berechnungen\I\I.cpp(323): error C2677: Binärer Operator '+': Es konnte kein globaler Operator gefunden werden, der den Typ 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich)
d:\Visual Studio Projekte\Berechnungen\I\I.cpp(323): error C2784: 'std::reverse_iterator<_RanIt> std::operator +(_Diff,const std::reverse_iterator<_RanIt> &)': Vorlagenargument für 'const std::reverse_iterator<_RanIt> &' von 'std::string' konnte nicht hergeleitet werden
d:\Visual Studio Projekte\Berechnungen\I\I.cpp(323): error C2784: 'std::reverse_iterator<_RanIt> std::operator +(_Diff,const std::reverse_iterator<_RanIt> &)': Vorlagenargument für 'const std::reverse_iterator<_RanIt> &' von 'std::string' konnte nicht hergeleitet werden
c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\xutility(626): Siehe Deklaration von 'std::operator`+''d:\Visual Studio Projekte\Berechnungen\I\I.cpp(323): error C2784: 'std::reverse_iterator<_RanIt> std::operator +(_Diff,const std::reverse_iterator<_RanIt> &)': Vorlagenargument für 'const std::reverse_iterator<_RanIt> &' von 'std::string' konnte nicht hergeleitet werden
c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\xutility(626): Siehe Deklaration von 'std::operator`+''d:\Visual Studio Projekte\Berechnungen\I\I.cpp(323): error C3767: '+' auf übereinstimmende Funktion kann nicht zugegriffen werden
kann die friend-Funktion bei 'c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\xstring(299)' sein: '+' [wird möglicherweise mit der argumentbezogenen Suche gefunden]
oder die friend-Funktion bei 'c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\xstring(299)' : '+' [kann über die argumentbezogene Suche gefunden werden]
oder die friend-Funktion bei 'c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\xstring(196)' : '+' [kann über die argumentbezogene Suche gefunden werden]
oder die friend-Funktion bei 'c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\xstring(196)' : '+' [kann über die argumentbezogene Suche gefunden werden]Und noch ne peinliche Frage, was genau ist die Signatur? Das hier hat zumindest MS Visual dazu zu sagen:
IDirectXFileSaveObject::SaveData
Saves a data object and its children to a Microsoft
DirectX
file.HRESULT SaveData(
LPDIRECTXFILEDATA pDataObj
);Parameters
pDataObj
[in] Pointer to an IDirectXFileData interface, representing the file data object to save.
Return Values
If the method succeeds, the return value is DXFILE_OK.If the method fails, the return value can be one of the following values.
DXFILEERR_BADARRAYSIZE
DXFILEERR_BADVALUERequirements
Header: Declared in Dxfile.h.
Import Library: Use D3dxof.lib.Da steht, dass man Dxfile.h mit reinnehmen soll.Aber es kommt ja gar keine Fehlermeldung in der Richtung, dass sie nicht inkludiert wäre, und normalerweise beschwert sich der Compiler bei sowas immer sofort. Ich hab sie mal mit inkludiert, das Ergebnis waren 100 Fehlermeldungen, die er aber gar nicht erst einzeln angezeigt hat,deswegen hab ich sie schnell wieder rausgenommen.
-
BeNNeR schrieb:
Da sind sie:
I.cpp(323): error C2677: Binärer Operator '+': Es konnte kein globaler Operator gefunden werden, der den Typ 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich) I.cpp(323): error C2784: 'std::reverse_iterator<_RanIt> std::operator +(_Diff,const std::reverse_iterator<_RanIt> &)': Vorlagenargument für 'const std::reverse_iterator<_RanIt> &' von 'std::string' konnte nicht hergeleitet werden I.cpp(323): error C2784: 'std::reverse_iterator<_RanIt> std::operator +(_Diff,const std::reverse_iterator<_RanIt> &)': Vorlagenargument für 'const std::reverse_iterator<_RanIt> &' von 'std::string' konnte nicht hergeleitet werden include\xutility(626): Siehe Deklaration von 'std::operator`+'' I.cpp(323): error C2784: 'std::reverse_iterator<_RanIt> std::operator +(_Diff,const std::reverse_iterator<_RanIt> &)': Vorlagenargument für 'const std::reverse_iterator<_RanIt> &' von 'std::string' konnte nicht hergeleitet werden include\xutility(626): Siehe Deklaration von 'std::operator`+'' I.cpp(323): error C3767: '+' auf übereinstimmende Funktion kann nicht zugegriffen werden kann die friend-Funktion bei 'include\xstring(299)' sein: '+' [wird möglicherweise mit der argumentbezogenen Suche gefunden] oder die friend-Funktion bei 'include\xstring(299)' : '+' [kann über die argumentbezogene Suche gefunden werden] oder die friend-Funktion bei 'include\xstring(196)' : '+' [kann über die argumentbezogene Suche gefunden werden] oder die friend-Funktion bei 'include\xstring(196)' : '+' [kann über die argumentbezogene Suche gefunden werden]Das sieht nach einem Problem in der string-Klasse aus - versuch doch, den Dateinamen direkt im printf zusammenzubauen:
sprintf(tmp,"Main%d.dat",t);Und noch ne peinliche Frage, was genau ist die Signatur?
Signatur ist die quasi die Deklaration der Funktion (Anzahl, Typ und Reihenfolge der Parameter), also in deinem Beispiel:
HRESULT SaveData( LPDIRECTXFILEDATA pDataObj );Und da haben wir vermutlich das nächste Problem: Die Funktion erwartet einen Pointer auf eine Dateistruktur und kann mit einem String herzlich wenig anfangen (außer MFC bietet noch eine überladene Version "HRESULT SaveData(std::string DataName);" an - aber da würde ich eher eine Variante mit CString vermuten, wenn überhaupt).
PS: Und bei allem, was jenseits des Standards liegt, kannst du sowieso nicht erwarten, daß es von verschiedenen Compilern gleich gut erkannt und verarbeitet wird.
-
Also ich habe den Dateinamen wie du vorgeschlagen hast in sprintf eingebaut und das hat funktioniert, SaveData hat den String akzeptiert und jetzt funktioniert es so, wie ich es brauche.
sprintf(tmp,"Main%d.dat",t);So eine simple Lösung, und ich hab mir stundenlang den Kopf zerbrochen und rumgesucht...
Aber ich glaub das werd ich mir sehr gut merken, vielen Dank für deine Hilfe.