Fehler beim Kompilieren



  • Hallo!

    Habe folgendes Problem:
    Hab ein C++-Projekt, das ich kompilieren will, dabei tritt aber folgender Fehler auf:
    19 E:\Projekt_Irrat\source_tmp\periode.h type specifier omitted for parameter IrratNumber' 19 E:\\Projekt\_Irrat\\source\_tmp\\periode.h syntax error before*' token
    42 E:\Projekt_Irrat\source_tmp\periode.h IrratNumber' was not declared in this scope 42 E:\\Projekt\_Irrat\\source\_tmp\\periode.hirrat_number' was not declared in this scope
    42 E:\Projekt_Irrat\source_tmp\periode.h invalid data member initialization
    42 E:\Projekt_Irrat\source_tmp\periode.h (use =' to initialize static data members) 42 E:\\Projekt\_Irrat\\source\_tmp\\periode.h variable or fieldcomputePeriodePositions' declared void

    Die Files schaun folgendermassen aus:
    periode.h:

    // periode.h
    
    #ifndef periode_h___
    #define periode_h___
    
    #include "data_new.h"
    #include "irrat_number.h"
    #include <vector>
    
    using std::vector;
    
    class Periode
    {
    
    public:
    
      Periode();
    
      Periode(vector<short int> periode, IrratNumber * irrat_number);
    
      virtual ~Periode();
    
      int getPeriodeLength();
    
      int getFoundPositionsNum();
    
      uint64 getPeriodePosition(int index);
    
      short int getPeriodeDigit(int index);
    
    protected:
    
      vector<short int> periode_;
    
      int periode_length_;
    
      vector<uint64> periode_positions_;
    
      int found_positions_num_;
    
      void computePeriodePositions(IrratNumber * irrat_number);
    
    };
    
    #endif // periode.h
    

    irrat_number.h:

    // irrat_number.h
    
    #ifndef irrat_number_h___
    #define irrat_number_h___
    
    #include "data_new.h"
    #include "periode.h"
    #include "apfloat.h"
    #inlude <vector>
    
    using std::vector;
    
    static const int EULER_NUMBER = 0;
    static const int PI_NUMBER = 1;
    static const int SQUARE_ROOT_NUMBER = 2;
    static const int CUBE_ROOT_NUMBER = 3;
    
    class IrratNumber
    {
    
    public:
    
      IrratNumber();
    
      virtual ~IrratNumber();
    
      vector<Periode> periode_list_;
    
      int periode_num_;
    
      virtual void changeLength(uint64 length);
    
      virtual void computeNumber(uint64 length);
    
      int getBeforComma();
    
      uint64 getLength();
    
      int getNumberType();
    
      short int getDecimalDigit(uint64 index);
    
    protected:
    
      apfloat decimal_digits_;
    
      int befor_comma_;
    
      uint64 length_;
    
      int number_type_;
    
    private:
    
      short int * actual_buffer_;
    
      short int * old_buffer_;
    
      size_t actual_block_;
    
    };
    
    #endif // irrat_number.h
    

    Es ist mir nicht ganz klar, wieso der Fehler auftritt, aber ich habe eine Vermutung. "periode.h" inkludiert eigentlich "irrat_number.h" und sollte damit die Klasse IrratNumber kennen. Nun ist es aber so, dass "irrat_number.h" selbst wiederum "periode.h" inkludiert, da ich hier die Klasse Periode brauche. Wenn dadurch ein Konflikt entsteht, wie kann ich den am besten lösen?
    Bin dankbar für jede Hilfe.

    Havaniceday
    Christian



  • vorwärtsdeklaration

    // periode.h
    
    #ifndef periode_h___
    #define periode_h___
    
    #include "data_new.h"
    // #include "irrat_number.h"  // in die cpp
    #include <vector>
    
    using std::vector;
    
    // vorwärtsdeklaration
    class IrratNumber;
    
    class Periode
    {
    
    public:
    
      Periode();
    
      Periode(vector<short int> periode, IrratNumber * irrat_number);
    
      virtual ~Periode();
    
      int getPeriodeLength();
    
      int getFoundPositionsNum();
    
      uint64 getPeriodePosition(int index);
    
      short int getPeriodeDigit(int index);
    
    protected:
    
      vector<short int> periode_;
    
      int periode_length_;
    
      vector<uint64> periode_positions_;
    
      int found_positions_num_;
    
      void computePeriodePositions(IrratNumber * irrat_number);
    
    };
    
    #endif // periode.h
    

Anmelden zum Antworten