error C2248, streamcode macht mucken
-
Hallo allerseits,
ich hab z.Z. in Info die Aufgabe aus einer Datei per Zeilensuche auszulesen.
Hier mal eben die Code-Zeilen auf die es ankommt:
void main (void) { double l[4],delta[3],delta1[3],pi=3.14159,G,b[3],F[3],A[3][3]; ifstream balken("Balken.dat"); ofstream lager("Lager.dat"); if (!balken) { cerr << "Es ist ein Fehler beim Oeffnen der Datei aufgetreten!" << endl; } else { G=keyfind("G: ",balken); delta[0]=keyfind("D1:",balken); delta[1]=keyfind("D2:",balken); delta[2]=keyfind("D3:",balken); l[0]=keyfind("L1:",balken); l[1]=keyfind("L2:",balken); l[2]=keyfind("L3:",balken); l[3]=keyfind("L4:",balken);double keyfind(string schluessel,ifstream balken) { string Zeile; istringstream iss; while (balken.eof()) { while(getline(balken, Zeile)); { if (Zeile[0]==schluessel[0] && Zeile[1]==schluessel[1] && Zeile[2]==schluessel[2]) { Zeile.erase(0,3); double D; iss.str(Zeile); iss >> D; return D; } } } }Ansonsten is an dem Programm alles top.
Wenn ich nun allerdings die Datei durchrechnen lasse bekomme ich folgende Fehlermeldung:
>C:\Programme\Microsoft Visual Studio 8\VC\include\fstream(675) : error C2248: "std::basic_ios<_Elem,_Traits>::basic_ios": Kein Zugriff auf private Member, dessen Deklaration in der std::basic_ios<_Elem,_Traits>-Klasse erfolgte. 1> with 1> [ 1> _Elem=char, 1> _Traits=std::char_traits<char> 1> ] 1> C:\Programme\Microsoft Visual Studio 8\VC\include\ios(151): Siehe Deklaration von 'std::basic_ios<_Elem,_Traits>::basic_ios' 1> with 1> [ 1> _Elem=char, 1> _Traits=std::char_traits<char> 1> ] 1> Diese Diagnose trat in der vom Compiler generierten Funktion "std::basic_ifstream<_Elem,_Traits>::basic_ifstream(const std::basic_ifstream<_Elem,_Traits> &)" auf. 1> with 1> [ 1> _Elem=char, 1> _Traits=std::char_traits<char> 1> ]Und damit kann ich mal überhaupt nix anfangen.
Ich hab auch schon per google gesucht, aber nichts gefunden, was mir weitergeholfen hat.Könnt ihr mir auf die Sprünge helfen?
-
Kein Zugriff auf private Member, dessen Deklaration in der std::basic_ios<_Elem,_Traits>-Klasse erfolgte.
Das sagt ja eigentlich alles. Jetzt musst du dort nur noch Doppelklick machen und dann zeigt er dir ja an, WO das genau ist.
-
ja dann springt er mir hier hin, soweit war ich auch schon, aber damit kann ich ja noch weniger anfangen.
private: _Myfb _Filebuffer; // the file buffer }; #if defined(_DLL_CPPLIB) && !defined(_M_CEE_PURE)Es sollte gesagt werden, dass ich Maschbau-Student bin und der Info-Unterricht recht für die Hose is.
Was allerdings auch keine Entschuldigung sein soll.
-
Jo, hier:
double keyfind(string schluessel,ifstream balken) { //... }Streams sind nicht kopierbar. Du musst eine Referenz übergeben:
double keyfind(string schluessel,ifstream& balken);
-
wow...
ein kleines Zeichen und kein weiterer Fehler. Vielen Dank.
Wenn sich doch noch ein Fehler findet werd ich mich hier nochmal melden.Vielen Dank.
-
sp.ChefKoch schrieb:
void main (void)Wird das von deinem Compiler toleriert? Mach es doch standardgemäss:
int main() // oder int main(void), wobei ich zu Ersterem rate
-
ja wird es.
hier mal das ganze programm, falls es jemanden interessiert.
allerdings ist noch irgendwo ein fehler, da die falschen ergebnisse rauskommen.// #include <iostream> #include <cmath> #include <iomanip> #include <string> #include <sstream> #include <fstream> using namespace std; double det (double A[3][3]) { double D; D=A[0][0]*A[1][1]*A[2][2]+A[0][1]*A[1][2]*A[2][0]+A[0][2]*A[1][0]*A[2][1]-A[0][2]*A[1][1]*A[2][0]-A[0][0]*A[1][2]*A[2][1]-A[0][1]*A[1][0]*A[2][2]; return D; } double keyfind(string schluessel,ifstream& balken) { string Zeile; istringstream iss; while (balken.eof()) { while(getline(balken, Zeile)); { if (Zeile[0]==schluessel[0] && Zeile[1]==schluessel[1] && Zeile[2]==schluessel[2]) { Zeile.erase(0,3); double D; iss.str(Zeile); iss >> D; return D; } } } } double Di(int i, double A[3][3], double b[3]) { double A2[3][3]; for (int j=0; j<3; j++) { for (int k=0; k<3; k++) { if (i==k) A2[j][k]=b[j]; else A2[j][k]=A[j][k]; } } return det(A2); } void lingl (double A[3][3],double b[3],double F[3]) { double D = det(A); for (int i=0; i<3; i++) { F[i]=Di(i, A, b)/D; } } void main (void) { double l[4],delta[3],delta1[3],pi=3.14159,G,b[3],F[3],A[3][3]; ifstream balken("Balken.dat"); ofstream lager("Lager.dat"); if (!balken) { cerr << "Es ist ein Fehler beim Oeffnen der Datei aufgetreten!" << endl; } else { G=keyfind("G: ",balken); delta[0]=keyfind("D1:",balken); delta[1]=keyfind("D2:",balken); delta[2]=keyfind("D3:",balken); l[0]=keyfind("L1:",balken); l[1]=keyfind("L2:",balken); l[2]=keyfind("L3:",balken); l[3]=keyfind("L4:",balken); delta1[0]=delta[0]; delta1[1]=delta[1]; delta1[2]=delta[2]; for (int i=0;i<3;i++) { delta[i]=delta[i]*pi/180; } for (int i=0;i<3;i++) { A[0][i]=cos(delta[i]); A[1][i]=sin(delta[i]); A[2][i]=l[i]*A[1][i]; } A[0][2]=-A[0][2]; b[0]=0; b[1]=G; b[2]=G*l[3]; lingl(A,b,F); lager << setprecision(1) << fixed; for (int i = 0; i<=3; i++) lager << "L" << i+1 << " = \t" << setw(8) << l[i] << "\t"; lager << endl; for (int i = 0; i<=2; i++) lager << "D" << i+1 << " = \t" << setw(8) << delta1[i] << "\t"; lager << endl << "G = \t" << setw(8) << G << endl; for (int i = 0; i<=2; i++) lager << "F" << i+1 << " = \t" << setw(8) << F[i] << "\t"; } balken.close(); }
-
sp.ChefKoch schrieb:
void main (void)Ist ja nett, wie du unsere Vorschläge beachtest. Denkst du, das fördert unsere Hilfsbereitschaft?

Und im Übrigen würde ich dir dringend zu C/C++- und nicht Code-Tags raten. Editier doch deinen Beitrag dementsprechend.
Und was soll diese Art? 115 Zeilen Code zu posten und zu sagen: Ihr könnt mal den Fehler suchen, irgendwas stimmt nicht. Was erwartest du eigentlich?
-
Ich erwarte garnichts, oder hab ich im letzten Beitrag was davon geschrieben, dass ihr den Fehler suchen oder mir dabei helfen sollt!?
Und wenns dich nich interessiert brauchst du's ja nicht durchzulesen.
Die Sache mit
void main (void)hat übrigens unser Prof vorgegeben.
Mag sein, dass das Quatsch ist, aber er will's so haben.
-
sp.ChefKoch schrieb:
Mag sein, dass das Quatsch ist, aber er will's so haben.
Du meinst, er hat was dagegen, korrigiert zu werden?
-
Keine Ahnung, aber ich schätz ihn eigentlich so ein dass ihm bewusst ist was er da schreibt.
Und es ändert ja nichts an der Funktion des Programmes - jedenfalls nichts was mir auffällt ^^
-
sp.ChefKoch schrieb:
Keine Ahnung, aber ich schätz ihn eigentlich so ein dass ihm bewusst ist was er da schreibt.
Mag sein, aber dann hat er seit >10 Jahren kein C++ Buch mehr gelesen.

-
Ich werds ihm ausrichten ^^
-
sp.ChefKoch schrieb:
Ich erwarte garnichts, oder hab ich im letzten Beitrag was davon geschrieben, dass ihr den Fehler suchen oder mir dabei helfen sollt!?
sp.ChefKoch schrieb:
hier mal das ganze programm, falls es jemanden interessiert.
allerdings ist noch irgendwo ein fehler, da die falschen ergebnisse rauskommen.Ich behaupte mal, das kommt einer Aufforderung, die Fehler durchzusuchen, ziemlich nahe.
sp.ChefKoch schrieb:
Und wenns dich nich interessiert brauchst du's ja nicht durchzulesen.
Hab ich auch nicht getan, aber nicht weils mich nicht interessiert hat. Ich mag erstens Mangel von Eigeninitiative und zweitens die Ignorierung der Vorschläge von anderen Usern nicht. Ich wollte es nur mal sagen, möglicherweise haben wir uns falsch verstanden.
sp.ChefKoch schrieb:
Und es ändert ja nichts an der Funktion des Programmes - jedenfalls nichts was mir auffällt ^^
Du hast einfach Glück, dass dein Compiler keine Fehlermeldung ausgibt. Standardkonform ist es deswegen noch lange nicht.