fstream funktioniert nicht



  • Ohne Code kann ich da auch nichts sagen.. 🙄

    Ausser include cmath. math.h ist C.



  • Könnte es daran liegen dass ich versuche ein c-Projekt mit C++-Code zu erweitern? Lässt sich C- und C++-Code überhaupt einfach so mischen?

    Und wie meinst du cmath.? Einfach #include <cmath.h>? Ich kann mich daran erinnern, dass wir in unseren c++ übungen immer include <math.h> verwendet haben.

    Hier mal mein Code:

    using namespace std
    #include <math.h>
    #include <stdio.h>
    #include <fstream.h>
    #include <string.h>
    
    //Hier werden einige Variablen initialisiert und es werden Werte zugewiesen
    
    //....
    
    //Hier soll später ein txt-file mit Werten eingelesen und die Werte in ein array geschrieben werden.
    
    fstream datei1("D:\\petersp\\Master-Arbeit DLD\\PF_2D\\properties_C35.txt", ios::out);
    
    datei1.close();
    
    double evalh(double a1, double a2, double xc, double b, double x);
    double evalfx(double x_coil, double l_coil, double r_coil, double x);
    
    //Funktion zur Bestimmung von h
    int geth(double x, double *h)
    {
    
        if (x<=dld_hc_x+dld_c1_x) 
    	{
    		*h = evalh(dld_h_free, dld_c1_h, dld_hc_x+dld_c1_x-dld_c_width, dld_b, x);
    	}
    	else if (x > dld_hc_x+dld_c1_x  &&  x <= dld_hc_x+(dld_c1_x+dld_c2_x)/2)
    	{
    		*h = evalh(dld_c1_h, dld_h_free, dld_hc_x+dld_c1_x+dld_c_width, dld_b, x);
    	}
    	else if (x > dld_hc_x+(dld_c1_x+dld_c2_x)/2  &&  x <= dld_hc_x+dld_c2_x)
    	{
    		*h = evalh(dld_h_free, dld_c2_h, dld_hc_x+dld_c2_x-dld_c_width, dld_b, x);
    	}
    	else if (x > dld_hc_x+dld_c2_x && x<= dld_hc_x+(dld_c2_x+dld_c3_x)/2)
    	{
    		*h = evalh(dld_c2_h, dld_h_free, dld_hc_x+dld_c2_x+dld_c_width, dld_b, x);
    	}
    	else if (x > dld_hc_x+(dld_c2_x+dld_c3_x)/2 && x<= dld_hc_x+dld_c3_x)
    	{
    		*h = evalh(dld_h_free, dld_c3_h, dld_hc_x+dld_c3_x-dld_c_width, dld_b, x);
    	}
    	else if (x > dld_hc_x+dld_c3_x)
    	{
    		*h = evalh(dld_c3_h, dld_h_free, dld_hc_x+dld_c3_x+dld_c_width, dld_b, x);
    	}
    	else { return 0;}
    
    	return 1;
    
    }
    
    //Funktion zur Bestimmung von Qv_ind
    int getQv(double x, double r, double T, double *Qv_ind)
    {
    
    	// distribution funstion in x [1/m]
    	double fx1 = evalfx(dld_p1_x, dld_p1_length, dld_p1_radius, x);
    	double fx2 = evalfx(dld_p2_x, dld_p2_length, dld_p2_radius, x);
    	// penetration depth [m]
    	double delta1 = sqrt((2*dld_coil_rhoC)/(2*pi*dld_p1_f*Mat[int(T)][7]*dld_Mu0));
    	double a1 = 1/delta1;
    
    	double delta2 = sqrt((2*dld_coil_rhoC)/(2*pi*dld_p2_f*Mat[int(T)][7]*dld_Mu0));
    	double a2 = 1/delta2;
    
    	// distribution function in r [1/m2]
    	double fr1 = pow(a1,2)/(2*pi*exp(-a1*dld_wire_r)+a1*dld_wire_r-1)*exp(a1*(r-dld_wire_r));
    	double fr2 = pow(a2,2)/(2*pi*exp(-a2*dld_wire_r)+a2*dld_wire_r-1)*exp(a2*(r-dld_wire_r));
    	// efficiency 
    	double eta1 = 1/(1+dld_p1_radius/dld_wire_r+sqrt((dld_coil_rhoC*dld_coil_MuC)/(Mat[int(T)][5]*Mat[int(T)][9])));
    	double eta2 = 1/(1+dld_p2_radius/dld_wire_r+sqrt((dld_coil_rhoC*dld_coil_MuC)/(Mat[int(T)][5]*Mat[int(T)][9])));
    
    	//heat source [q/(m3*s)]
    	*Qv_ind = dld_p1_power*(eta1-dld_p1_loss)*fx1*fr1 + dld_p2_power*(eta2-dld_p1_loss);
    
    	return 1;
    
    }
    
    double evalfx(double x_coil, double l_coil, double r_coil, double x)
    {
    	return 1/(2*l_coil) * ((x_coil+l_coil-x)/sqrt(pow(x_coil+l_coil-x,2) + pow(r_coil,2)) - (x_coil-x)/sqrt(pow(x_coil-x,2)+pow(r_coil,2)));
    }
    
    double evalh(double a1, double a2, double xc, double b, double x)
    {
    	return (a2-a1)/pi*atan(b*(x-xc))+(a2-a1)/2+a1;
    }
    


  • pitaz schrieb:

    Könnte es daran liegen dass ich versuche ein c-Projekt mit C++-Code zu erweitern? Lässt sich C- und C++-Code überhaupt einfach so mischen?

    Kommt auf die Richtung an. C++ hat C als Untermenge. (zwar nicht ganz, aber zu ca. 99%). Somit geht eigentlich alles, was in C ging auch in C++, aber vieles geht in C nicht, was in C++ geht. (ist auch logisch..)

    Aber wenn du mal die Codestelle zeigst, können wir viel mehr sagen..



  • Sorry, Tut mir echt leid, dass ich hier solche Fragen stelle.

    Bei dem Projekt handelt es sich um ein recht umfangreiche Tool zur Finite-Elemente-Berechnung. WEnn ich ehrlich bin blick ich da auch nicht durch. Ich will nun eigentlich nur einige Funktionen zur Verfügung stellen, um an einer bestimmten Stelle zwei Werte abhängig von anderen Werten berechnen zu können.

    Wenn ich also ein Projekt aus mehreren Source-Files habe, die alle in C geschrieben sind. Kann ich dann ein weitres Source File anhängen, welches in C++ geschrieben ist? Notfalls könnte ich auch alles in C machen, C++ wär mir aber lieber.



  • Sofern du für den C++-Code auch einen C++-Compiler verwendest, sollte das kein Problem sein. Solche Mischlingsprojekte haben wir auch zuhauf...



  • Erkennt MS Visual Studio nicht anhand der Fileendung, ob es sich um ein C- oder ein C++-File handelt?

    Hab immer noch folgende Fehlermeldung:

    c:\programme\microsoft visual studio\vc98\include\math.h(36) : error C2144: Syntaxfehler : Fehlendes ';' vor Typ 'int'
    c:\programme\microsoft visual studio\vc98\include\math.h(36) : error C2871: 'std' : Existiert nicht oder ist kein Namespace
    c:\programme\microsoft visual studio\vc98\include\math.h(36) : fatal error C1004: Unerwartetes Dateiende gefunden
    Fehler beim Ausführen von cl.exe.



  • pitaz schrieb:

    Erkennt MS Visual Studio nicht anhand der Fileendung, ob es sich um ein C- oder ein C++-File handelt?

    Ja, ist richtig. Ich wusste ja auch nicht, welche IDE und welchen Compiler du verwendest. Das lässt sich übrigens auch in den Projekteinstellungen ändern, da kannst du den Compiler explizit wählen (C/C++-Einstellungen => Erweitert, glaube ich).

    EDIT: Ok, das du das VS verwendest, hätte man an den geposteten Fehlermeldungen sehen können... 🤡



  • Hallo

    Erst noch mal vielen Dank dass du dir Zeit nimmst um meine diletantischen Fragen zu beantworten. Wenn ich jetzt das gesamte Projekt kompilliere sollte Visual Studio automatisch den richtigen Compiler verwenden?

    Das Problem liegt momentan auch bei math.h, siehe Fehler oben.



  • Musst du "using namespace std;" nicht [b]hinter[b/] das Einbinden der Header, in denen der Namespace deklariert wird, packen?

    EDIT: Und wenn du C++ programmieren willst, dann nimm <fstream> statt <fstream.h>, <cmath> statt <math.h> usw...



  • Wnn ich using namespace std; ans Ende packe sagt mir der Compiler:

    D:\petersp\Master-Arbeit DLD\PF_2D\PF_2D\so\so_dld.cpp(22) : error C2871: 'std' : Existiert nicht oder ist kein Namespace



  • Probier bitte mal folgenden Kopf für deine Datei:

    #include <cstdio>
    #include <fstream>
    #include <string>
    #include <cmath>
    
    using namespace std;
    


  • Danke, hat das math.h Problem gelöst. Jetzt ist aber wieder ein Problem bei dem fstream Teil aufgetaucht.

    fstream datei1("D:\\petersp\\Master-Arbeit DLD\\PF_2D\\properties_C35.txt", ios::in);
    
    datei1.close();
    

    Da will ich später noch was rauslesen.

    Fehlermeldung:
    D:\petersp\Master-Arbeit DLD\PF_2D\PF_2D\so\so_dld.cpp(94) : error C2143: Syntaxfehler : Fehlendes ';' vor '.'
    D:\petersp\Master-Arbeit DLD\PF_2D\PF_2D\so\so_dld.cpp(94) : error C2501: 'datei1' : Fehlende Speicherklasse oder Typbezeichner
    D:\petersp\Master-Arbeit DLD\PF_2D\PF_2D\so\so_dld.cpp(94) : error C2371: 'datei1' : Neudefinition; unterschiedliche Basistypen
    D:\petersp\Master-Arbeit DLD\PF_2D\PF_2D\so\so_dld.cpp(92) : Siehe Deklaration von 'datei1'
    D:\petersp\Master-Arbeit DLD\PF_2D\PF_2D\so\so_dld.cpp(94) : error C2143: Syntaxfehler : Fehlendes ';' vor '.'



  • Sorry, hab Feierabend... 😞



  • Kann es sein, dass der Bezeichner datei1 schonmal verwendet wurde?



  • Hallo

    Nein, kann nicht sein. Ich habe keine Ahnung woran das liegen könnte.

    Bin wirklich um jede Hilfe dankbar.



  • Dein datei1.close() steht frei in deinem Code, muß aber doch in eine Funktion.



  • Danke, jetzt gehts.


Anmelden zum Antworten