Problem mit Struktur



  • Moin,
    ich habe folgendes:

    //.h
    struct OSTRUCT;
    OSTRUCT PreAnalyze(char* strCalc);
    double MParse(char* strCalc);
    
    //.cpp
    struct OSTRUCT
    {
    	int *operators;
    	int size;
    };
    //...
    double MParse(char* strCalc)
    {
    //...
    	OSTRUCT ops;
    	ops = PreAnalyze(str.GetBuffer()); //error: nichtdeklarierter Bezeichner
            //error: '=' : ''unknown-type'' kann nicht in 'OSTRUCT' konvertiert werden
    
    };
    
    OSTRUCT PreAnalyze(char* strCalc) // error: 'PreAnalyze' : Erneute Definition; vorherige Definition war 'Ehemals unbekannter Bezeichner'
    {
    //...
    }
    

    Wer kann mir sagen, was ich falsch mache?

    MfG
    brot



  • //EDIT:
    Forget it



  • die struct definition sollte besser mit in die .h rein



  • Hatte ich erst, dann kennt er ostruct in der cpp gar nicht mehr.



  • das_brot schrieb:

    Hatte ich erst, dann kennt er ostruct in der cpp gar nicht mehr.

    na ind die cpp muss dann '#include "deine_h_datei"'



  • Klar, ich include den Header, darum kennt er ja auch die andere Funktion. MParse.
    Offensichtlich hat er Probleme mit OSTRUCT 😕



  • so könnte die .h aussehen:

    //.h
    struct OSTRUCT
    {
    	int *operators;
    	int size;
    };
    OSTRUCT PreAnalyze(char* strCalc);
    double MParse(char* strCalc);
    

    dann aber das 'struct OSTRUCT...' aus der .cpp entfernen



  • hatte ich zuerst...
    Ging leider auch nicht darum bin ich auf diese (komische) Lösung gekommen...



  • Solange du OSTRUCT nur in dieser einen .cpp-Datei verwendest, spielt es für die Funktionsweise keine Rolle, wo die Definition von OSTRUCT steht, der Header wird ja schließlich auch nur eingefügt.
    Du wirst aber wohl nicht darum herumkommen, den Quelltext ganz, oder zumindest einen größeren Ausschnitt, zu posten, denn in diesem Auszug kann man die Fehlerursache nicht wirklich erkennen. Der fehlende Bezeichner kann sich nur entweder auf PreAnalyze (in welchem Fall du die Header-Datei wahrscheinlich *nicht* richtig einbindest) oder auf str.GetBuffer(), aber genau das lässt sich so nicht schlussfolgern...

    Grundsätzlich solltest du mit deinen OSTRUCTs aber aufpassen. Durch den Pointer-Member und nicht selbst angepassten Copy-Konstruktor und -Zuweisungsoperator verhalten sie sich beim Kopieren vielleicht anders, als du erwartest...



  • OK, bin auf deinen Hinweis eingegangen und löse es nun anders.
    Man scheint ja keine Anhänge machen zu können, aber ich kann den Source mailen, wenn es jemand näher ansehen will. (sraez@gmx.ch)
    Es handelt sich übrigens bei der Funktion um einen Art "Parser" für Rechnungen, die der Funktion MParse() als String übergeben werden, etwa "1+3.2*(2+3)".
    Momentan berücksichtigt die Funktion Klammern und kann +,-,*,/ rechnen.
    Dabei wird jedoch nicht Punkt vor Strich gerechnet, sondern von Links nach Rechts.
    Die Berücksichtigung von Punkt vor Strich versuche ich nun mithilfe dieser Struktur zu realisieren.

    MfG
    brot



  • Habe einen anderen Lösungsweg.


Anmelden zum Antworten