seltsames verhalten bei einer einfachen struktur



  • hallo leute, habe ein seltsames problem mit einer struktur und dem zugriff auf deren elemente.

    hier der code:

    #include <iostream>
    
    using namespace std;
    
    struct geoKreis
    {
    	float A;  // Fläche ; A = (r*r) * pi
    	float U;  // Umfang ; U = pi * 2
    	float d;  // Durchmesser ; d = 2r
    	float r;  // Radius ; r = d/2
    	float pi; // Pi ; pi = U/2
    
    } kreis;
    
    kreis.r = 1;
    

    die main-funktion lasse ich mal aus, da irrelevant.

    und hier die fehlermeldung:

    snik [ ~/work/cc++/studium ] $ rm prog; g++ main.cpp -o prog; ./prog;
    removed `prog'
    main.cpp:20: error: expected constructor, destructor, or type conversion before ‘.’ token
    bash: ./prog: No such file or directory
    snik [ ~/work/cc++/studium ] $
    

    mein system:

    snik [ ~/work/cc++/studium ] $ cat /proc/version 
    Linux version 2.6.23.17 (root@skynet) (gcc version 4.1.2) #3 SMP Tue May 27 20:23:47 CEST 2008
    snik [ ~/work/cc++/studium ] $
    

    ich sehe da einfach keinen fehler, so simpel das auch sein mag. 🙂

    gruß
    snikkers



  • schon mal was von funktionen gehört? 😃



  • 1. Liegt diese Zeile

    kreis.r = 1;
    

    auserhalb der main bzw. andere funktionen? wenn nein, versuchs mal so:

    typedef struct { 
        float A;  // Fläche ; A = (r*r) * pi 
        float U;  // Umfang ; U = pi * 2 
        float d;  // Durchmesser ; d = 2r 
        float r;  // Radius ; r = d/2 
        float pi; // Pi ; pi = U/2 
    
    } geoKreis ;
    .
    .
    .
    int main(void){
    
    geoKreis Kreis;
    
    Kreis.r=1;
    
    }
    


  • BorisDieKlinge schrieb:

    mach mal:

    typedef struct { 
        float A;  // Fläche ; A = (r*r) * pi 
        float U;  // Umfang ; U = pi * 2 
        float d;  // Durchmesser ; d = 2r 
        float r;  // Radius ; r = d/2 
        float pi; // Pi ; pi = U/2 
    
    } geoKreis ;
    .
    .
    .
    int main(void){
    
    geoKreis Kreis;
    
    Kreis.r=1;
    
    }
    

    Das ist C.
    Wir sind hier im C++ Forum:

    struct GeoKreis
    {
        GeoKreis(): r(1.0f){ }
        float A;  // Fläche ; A = (r*r) * pi 
        float U;  // Umfang ; U = pi * 2 
        float d;  // Durchmesser ; d = 2r 
        float r;  // Radius ; r = d/2 
        float pi; // Pi ; pi = U/2 
    };
    


  • ups sorry... wenn ich ne structur sehe denke ich in C^^



  • BorisDieKlinge schrieb:

    ups sorry... wenn ich ne structur sehe denke ich in C^^

    Tust Du das nicht immer? 🙄



  • du kannst nicht direkt auf die struktur zugreifen. du musst wie bei einer klasse auch eine instanz erzeugen. also:

    kreis kr;
    kr.r = 1;
    

    btw:

    wenn du die namen in der struktur ausschreibst ist es weniger verwirrend 😉



  • Machine schrieb:

    du kannst nicht direkt auf die struktur zugreifen. du musst wie bei einer klasse auch eine instanz erzeugen[...]

    Hat er doch:

    struct geoKreis //Typ Deklaration
    {
        float A;  // Fläche ; A = (r*r) * pi
        float U;  // Umfang ; U = pi * 2
        float d;  // Durchmesser ; d = 2r
        float r;  // Radius ; r = d/2
        float pi; // Pi ; pi = U/2
    
    } kreis; //Objekt Definition
    


  • Tachyon schrieb:

    Machine schrieb:

    du kannst nicht direkt auf die struktur zugreifen. du musst wie bei einer klasse auch eine instanz erzeugen[...]

    Hat er doch:

    struct geoKreis //Typ Deklaration
    {
        float A;  // Fläche ; A = (r*r) * pi
        float U;  // Umfang ; U = pi * 2
        float d;  // Durchmesser ; d = 2r
        float r;  // Radius ; r = d/2
        float pi; // Pi ; pi = U/2
    
    } kreis; //Objekt Definition
    

    sorry, übersehen 😉



  • Machine:
    die instanz habe ich erstellt, das kann man auf 2 arten machen. die erste (meine) und die zweite (deine). 🙂 das hier ist eh son kleines und übersichtliches testdingens, bei was größerem hast du natürlich recht.

    BorisDieKlinge:
    deine variante ist noch näher an C, als meine. *g

    Tachyon:
    meine stuktur ist doch C++, bloß ohne funktionen.

    Problem gelöst:
    meine struktur ist OK, der fehler lag darin, dass ich das objekt ausserhalb einer funktion benutzt habe. da man variablen global initialisieren kann, habe ich das auch auf objekte übertragen. wieso geht das nicht mit objekten?

    ps: wie kann man die eigenschaften eines objekts übersichtlich anzeigen (dump) lassen? sprich sowas wie sizeof(var).

    2. Problem:
    muss jetzt los zur arbeit. bis nachher. 😑 danke für die rege beteiligung!



  • ps: wie kann man die eigenschaften eines objekts übersichtlich anzeigen (dump) lassen? sprich sowas wie sizeof(var).

    Eine eigene Funktion schreiben oder einen Debugger verwenden.



  • irgendwelche tipps, wie ich da heran gehen sollte?



  • Was willst du den genau?

    Du kannst das in Dateien machen oder auf die Konsole, oder wie schon gesagt einfach mit dem Debugger anschauen..


Anmelden zum Antworten