Probleme beim Übergeben einer Struktur an den Konstruktor



  • Hey @all,

    und zwar habe ich das Problem, das ich an meinen Konstruktor keine Strukturen übergeben kann.
    Folgendes Beispiel:

    Klasse

    // object.hpp
    class Object {
      protected:
        struct Coord {
          GLfloat x_pos;
          GLfloat y_pos;
          GLfloat z_pos;
          GLfloat x_distance;
          GLfloat y_distance;
          GLfloat z_distance;
          GLfloat step;
          char figure[80];
        } coord;
        [...]
    };
    
    ------------------------------------------------
    // point.hpp
    
    #include "object.hpp"
    class Point : public Object {
      private:
        Coord coord;
    
      public:
        Point(GLfloat);
        Point(Coord);
    
        // Folgende Konstruktoren habe ich bereits probiert
        Point(Coord&);
        Point(Coord*);
        Point(Coord*&);
        [...]
    }
    

    Hauptprogramm

    #include ...
    [...]
    
    struct Coord {
      GLfloat x_pos;
      GLfloat y_pos;
      GLfloat z_pos;
      GLfloat x_distance;
      GLfloat y_distance;
      GLfloat z_distance;
      GLfloat step;
      char figure[80];
    } coord;
    
    int main(....) {
      Point* p = new Point(coord);
    [...]
    

    Als Fehlermeldung bekomme ich folgendes:

    [C++ Fehler] main.cpp(146): E2285 Keine Übereinstimmung für 'Point::Point(Coord)' gefunden
    

    Wie muss ich den die Struktur dem Konstruktor den sonst übergeben.

    Bitte um hilfe, bin schon am verzweifeln 😞

    Lg _freeze_



  • schreib so

    // object.hpp
    class Object {
      protected:
        typedef struct Coord {
          // member
        } COORD;
        [...]
    };
    
    ------------------------------------------------
    // point.hpp
    
    #include "object.hpp"
    class Point : public Object {
      private:
        Coord coord;
    
      public:
        Point(GLfloat);
        Point(COORD *a_coord);
    
        [...]
    }
    


  • Ja, also ich habe es jetzt so wie Du beschrieben hast umgeändert, jedoch bekomme ich noch immer folgende Fehlermeldung:

    [C++ Fehler] main.cpp(146): E2285 Keine Übereinstimmung für 'Point::Point(Coord)' gefunden
    

    Lg _freeze_



  • Könnte mir jemand einen Lösungsvorschlag machen, um das Problem in den Griff zu bekommen?

    Lg _freeze_



  • Du hast zwei verschiedene Strukturen, einmal Object::Coord und einmal ::Coord. Dass beide den gleiche Inhalt haben und den gleichen Namen haben, interessiert den Compiler nicht, es sind zwei verschiedene Typen und daher nicht miteinander kompatibel.



  • ja ok, aber wie übergebe ich jetzt dem Objekt Point die Coordinaten?

    Lg _freeze_



  • #include <iostream>
    #include <iomanip>
    using namespace std;
    //------------------
    class Object { 
      public: 
        struct Coord { 
          float x_pos; 
          float y_pos; 
          float z_pos; 
          float x_distance; 
          float y_distance; 
          float z_distance; 
          float step; 
          char figure[80]; 
        };
    	protected:
    	Coord coord;
    
    	public:
    	Object(const Coord& aCoord)
    	{
    		coord=aCoord;
    	}
    
    }; 
    //------------------
    class Point : public Object 
    { 
    
    	public: 
    
    		Point(const Coord& aCoord):Object(aCoord){}
    	//.................
    	//.................
    
    };
    //------------------
    
    int main()
    {
    
    	Object::Coord iCoord;
    	Point *pPoint=new Point(iCoord);
    
    	return 0;
    }
    

    Hallo,

    Wenn du ein Objekt vom Typ Coord in der main Prozedur erzeugen willst, musst du die Typdefinition der Struktur in den public Bereich der Klasse Object schreiben.Die Basisklasse Object enthält dann eine Typdefinition (die auch global hätte sein können) und ein Objekt von Coord gleich dazu (im protected Bereich).Wenn du Coord von auße instanzieren möchtest, musst du es voll qualifizieren (Object::Coord)!
    Die Klasse Point erbt dann das Object coord. Eine Konstruktorliste ist notwendig, damit die Basisklasse selbst das Objekt initialisieren kann.
    Übergabe der Struktur ist am besten als konstante Referenz.

    Grüße,

    SliderMaxx


Anmelden zum Antworten