PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Visual Studio .net 2003 && fstream etc.


Einfachkrank
2005-06-28, 17:30:39
Moin,

ich bin seit zwei Tagen glücklicher, aber genervter Besitzer des Visual Studio .net 2003...
Vorher habe ich mit Visual C++ 6.0 Standard programmiert...

Warum sind die ganzen Header mit stream etc. verschwunden und was verwende ich jetzt statt fstream?

MfG Einfachkrank

Coda
2005-06-28, 17:33:09
Weil sie nie im C++ Standard waren und "sanfte Migration" keinen Erfolg hatte wie man an dir feststellen kann ;)

Es heißt z.B. <iostream> nicht <iostream.h>. Der Inhalt ist auch ein Anderer.

Einfachkrank
2005-06-28, 17:46:32
Ja ja, das ist mir klar, aber das funktioniert einfach net mehr so gut wie früher, deswegen frag ich, was man ich stattdessen nehmen kann ;)

Coda
2005-06-28, 17:51:22
Einfach das .h weglassen und die standarisierten Funktionen & Klassen verwenden?

#include <iostream>

int main() {
std::cout << "Hello, World" << std::endl;
}Geht doch einwandfrei.

Einfachkrank
2005-06-28, 18:07:39
Ja so was schon, aber wenn ich zum Beispiel eine Datei per fstream an eine Funktion übergeben will, dann bekomm ich gesagt, es gibt keinen passenden Kopier Operator etc.

RoKo
2005-06-28, 18:47:10
Ja so was schon, aber wenn ich zum Beispiel eine Datei per fstream an eine Funktion übergeben will, dann bekomm ich gesagt, es gibt keinen passenden Kopier Operator etc.
Habe es jetzt nicht ausprobiert oder drüber nachgelesen, aber vielleicht ist es so gedacht und die wollen, dass Du die Streams als Pointer oder Referenzen übergibst.
void blub(const fstream& file);

Coda
2005-06-28, 20:07:34
Ja so was schon, aber wenn ich zum Beispiel eine Datei per fstream an eine Funktion übergeben will, dann bekomm ich gesagt, es gibt keinen passenden Kopier Operator etc.RTFM?

Zeig mal die betreffende Codestelle, da ist garantiert nicht der Compiler dran schuld.

Einfachkrank
2005-06-28, 20:39:28
Habe es jetzt nicht ausprobiert oder drüber nachgelesen, aber vielleicht ist es so gedacht und die wollen, dass Du die Streams als Pointer oder Referenzen übergibst.
void blub(const fstream& file);
Also ich weiß auch nicht, ob das so sein soll, jedenfalls geht es mit Zeigern, aber nicht mit Referenzen... schon komisch :confused:

Coda
2005-06-28, 20:47:11
Das kann ja schonmal gar nicht sein. Code!

Einfachkrank
2005-06-28, 23:16:37
Also das hier ist der Ursprung ohne Veränderungen mit Zeigern oder Referenzen...

Es gibt eine CUnknown Klasse die an die CImageLoaderBMP Klasse vererbt wird. Die CUnknown Klasse steuert von einem Objekt die vergebenen Referenzen beim Löschen und vereinfacht Protokolleinträge...
Was die CImageLoaderBMP Klasse tut.. na ja, könnt ihr sicher erahnen ;)
void CUnknown::printLog(fstream log, c1 *str, ...)
{
va_list argList;
c1 c1String[256];


va_start(argList, str);

vsprintf(c1String, str, argList);

va_end(argList);


log << "::" << c1Classname << ":: " << c1String << endl;
}


CImage *CImageLoaderBMP::loadImage(fstream report, c1 *fileName)
{
if(!fileName) return NULL;

fstream file;
CImage *image = 0;


file.open(fileName, ios::in | ios::binary);

if(!file.is_open())
{
printLog(report, "(%s) - Could not open file", fileName);
return NULL;
}

// ...
Und der Debugfehler der ausgespuckt wird, ist folgender:

e:\Save\Windows\Visual Development\Visual C++\m3d_project\m3d_lib\m3dCImageLoaderBMP.cpp(33) : error C2664: 'CUnknown::printLog' : cannot convert parameter 1 from 'std::fstream' to 'std::fstream'
No copy constructor available for class 'std::basic_fstream<_Elem,_Traits>' or constructor attempts to perform illegal conversion to non-__gc reference
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
e:\Save\Windows\Visual Development\Visual C++\m3d_project\m3d_lib\m3dCImageLoaderBMP.cpp(40) : error C2664: 'CUnknown::printLog' : cannot convert parameter 1 from 'std::fstream' to 'std::fstream'
No copy constructor available for class 'std::basic_fstream<_Elem,_Traits>' or constructor attempts to perform illegal conversion to non-__gc reference
with
[
_Elem=char,
_Traits=std::char_traits<char>
]
e:\Save\Windows\Visual Development\Visual C++\m3d_project\m3d_lib\m3dCImageLoaderBMP.cpp(46) : error C2664: 'CUnknown::printLog' : cannot convert parameter 1 from 'std::fstream' to 'std::fstream'
No copy constructor available for class 'std::basic_fstream<_Elem,_Traits>' or constructor attempts to perform illegal conversion to non-__gc reference
with
[
_Elem=char,
_Traits=std::char_traits<char>
]

Coda
2005-06-28, 23:20:09
Du kompilierst anscheinend nach .NET, das solltest du besser bleiben lassen. Ist bei .NET 2003 noch sehr unausgereift.

Einfachkrank
2005-06-28, 23:35:16
Mhhhhhhhhh..... gute Frage... Wie stell ich das denn um und wo genau?

Coda
2005-06-28, 23:36:10
In den Projektsettings ist irgendwas mit "managed extensions" und "/clr". Das solltest du wegmachen.

Oder einfach ein neues Projekt anlegen und zwar nicht .NET sondern Win32 - also "Win32 Project".

Einfachkrank
2005-06-28, 23:47:28
Mhh... find ich jetzt nichts direkt, aber ich weiß ziemlich genau, dass ich ein Win32 Projekt angelegt hab und nichts mit .net ...

Coda
2005-06-29, 01:39:23
Und ich bin mir ganz sicher das du das eben nicht gemacht hast, sonst könnte der Fehler gar nicht auftreten.

Einfachkrank
2005-06-29, 11:50:45
Nee hab ich nicht, aber um absolut sicher zu gehen hab ich einfach das Projekt neu angelegt und der Fehler ist wieder da. Unter den Projekt Eigenschaften hab ich auch noch ein Feld mit "use managed extension" gefunden, aber das ist auf "no" gesetzt... :(

Coda
2005-06-29, 13:18:48
Naja, das fstream Objekt solltest du sowieso als Referenz übergeben ;)