[SOLVED] Kein geeigneter Standardkonstruktor



  • Arcoth schrieb:

    Und zwar kommt jeder Fehler 5 mal.

    Wahrscheinlich weil du den Header in fünf Übersetzungseinheiten (=Source-Dateien) einbindest.

    VS 2012 unterstützt default wahrscheinlich noch nicht.

    In dem Fall: Bug. Schreib einfach deine Definition hin und fertig.

    Achso, ok. Dann ist es ein Bug. Ist ja auch so gesehen eigentlich gar kein Problem den Konstruktor da noch hinzuschreiben. 🙂



  • Ein Standardkonstruktor wird vom Compiler nur erzeugt, wenn es keinen anderen Konstruktor gibt. In Texture erzeugst du ein Vector2D-Objekt über den Standardkonstruktor, also bekommst du eine Fehlermeldung. Das Problem kann man entweder lösen, indem man Vector2D einen Standardkonstruktor gibt, oder indem man Texture einen Standardkonstruktor gibt, der Vector2D über einen der vorhandenen Konsturktoren erzeugt.

    Ich wundere mich nur über die Fehlermeldung deines Compilers, ich glaube es wäre sinnvoller gewesen, zuerst auf das Problem mit Vector2D hinzuweisen.


  • Mod

    Ohgottohgott - da hab' ich was völlig übersehen.
    Texture2D hat ja einen eigenen Konstruktor. In dem Fall wird natürlich kein Defaultkonstruktor für Texture2D generiert. Und somit auch nicht für Texture .

    Das ist natürlich kein Bug.



  • Bashar schrieb:

    Ein Standardkonstruktor wird vom Compiler nur erzeugt, wenn es keinen anderen Konstruktor gibt. In Texture erzeugst du ein Vector2D-Objekt über den Standardkonstruktor, also bekommst du eine Fehlermeldung. Das Problem kann man entweder lösen, indem man Vector2D einen Standardkonstruktor gibt, oder indem man Texture einen Standardkonstruktor gibt, der Vector2D über einen der vorhandenen Konsturktoren erzeugt.

    Ich wundere mich nur über die Fehlermeldung deines Compilers, ich glaube es wäre sinnvoller gewesen, zuerst auf das Problem mit Vector2D hinzuweisen.

    Nur durch die Deklaration einer Instanz von Vector2D

    Vector2D position;
    

    wird also schon der Standardkonstruktor von Vector2D aufgerufen und da ich den nicht definiert hatte, dafür nur einen eigenen überladenen Konstruktor

    Vector2D(float x, float y);
    

    kommt es zu der Fehlermeldung, habe ich das so richtig verstanden?

    Und dann brauche ich den Standardkonstruktor in der Texture Klasse gar nicht, sondern nur einen in der Vector2D.



  • huzzm schrieb:

    Nur durch die Deklaration einer Instanz von Vector2D

    Vector2D position;
    

    wird also schon der Standardkonstruktor von Vector2D aufgerufen und da ich den nicht definiert hatte, dafür nur einen eigenen überladenen Konstruktor

    Vector2D(float x, float y);
    

    kommt es zu der Fehlermeldung, habe ich das so richtig verstanden?

    Durch die bloße Deklaration passiert erstmal überhaupt nichts. Das Problem ist, dass der vom Compiler erzeugte Standardkonstruktor für Texture so aussieht:

    Texture()
    {
      // gähnene Leere
    }
    

    Jetzt sag mir, wenn ich eine Instanz von Texture anlege, wie wird der Vector2D-Member initialisiert?

    Du dagegen hättest die Möglichkeit, ihn z.B. so zu definieren:

    Texture()
      : position(0, 0)  // z.B.
    { }
    

    so dass kein Standardkonstruktor von Vector2D nötig wäre.

    Und dann brauche ich den Standardkonstruktor in der Texture Klasse gar nicht, sondern nur einen in der Vector2D.

    Oder so. Sich für eine der Möglichkeiten zu entscheiden ist das, was man Design nennt.



  • Bashar schrieb:

    huzzm schrieb:

    Nur durch die Deklaration einer Instanz von Vector2D

    Vector2D position;
    

    wird also schon der Standardkonstruktor von Vector2D aufgerufen und da ich den nicht definiert hatte, dafür nur einen eigenen überladenen Konstruktor

    Vector2D(float x, float y);
    

    kommt es zu der Fehlermeldung, habe ich das so richtig verstanden?

    Durch die bloße Deklaration passiert erstmal überhaupt nichts. Das Problem ist, dass der vom Compiler erzeugte Standardkonstruktor für Texture so aussieht:

    Texture()
    {
      // gähnene Leere
    }
    

    Jetzt sag mir, wenn ich eine Instanz von Texture anlege, wie wird der Vector2D-Member initialisiert?

    Du dagegen hättest die Möglichkeit, ihn z.B. so zu definieren:

    Texture()
      : position(0, 0)  // z.B.
    { }
    

    so dass kein Standardkonstruktor von Vector2D nötig wäre.

    Und dann brauche ich den Standardkonstruktor in der Texture Klasse gar nicht, sondern nur einen in der Vector2D.

    Oder so. Sich für eine der Möglichkeiten zu entscheiden ist das, was man Design nennt.

    Alles klar. Danke 🙂



  • Guten Tag zusammen,

    nach dem ich diverse Threads durchgelesen habe, aber keins gefunden habe welches mir bei meinem Problem hilft, dachte ich mir das dieser Thread am nächsten zu meinem Problem passt auch wenn es einfacher ist als vom Threadersteller.

    Wie wende ich einen Konstruktor auf die Klasse an?
    Ich hab mir auch schon diverse Artikel zum Thema Konstruktor durchgelesen und folgendes kommt meiner Meinung nach bei mir raus, aber beim kompilieren bekomme ich ständig eine Fehlermeldung das mein Konstruktor falsch sei.
    Mein Konstruktor soll aber die Paramter a, name etc haben.

    Folgendes allg. Beispiel:

    class x{
      private:
      int a;
      sting name;
      ..etc..
    
       //Konstrukor so 
       x(int a, string name)
    
       //oder so?
      x::x(int a, string name)
    
      public:
    
    };
    

    Irgendwas habe ich missverstanden in diesem Thema. 😞



  • Warum machst du nicht einen eigenen Beitrag auf?

    Der Compiler sagt ganz sicher, was falsch ist! Warum verschweigst du das?

    Die erste Version ist richtig (sofern string bekannt ist). Allerdings ist der Kontruktor private. Möglicherweise ist das der Fehler.



  • mobile-freak schrieb:

    Guten Tag zusammen,

    nach dem ich diverse Threads durchgelesen habe, aber keins gefunden habe welches mir bei meinem Problem hilft, dachte ich mir das dieser Thread am nächsten zu meinem Problem passt auch wenn es einfacher ist als vom Threadersteller.

    Wie wende ich einen Konstruktor auf die Klasse an?
    Ich hab mir auch schon diverse Artikel zum Thema Konstruktor durchgelesen und folgendes kommt meiner Meinung nach bei mir raus, aber beim kompilieren bekomme ich ständig eine Fehlermeldung das mein Konstruktor falsch sei.
    Mein Konstruktor soll aber die Paramter a, name etc haben.

    Folgendes allg. Beispiel:

    class x{
      private:
      int a;
      sting name;
      ..etc..
      
       //Konstrukor so 
       x(int a, string name)
    
       //oder so?
      x::x(int a, string name)
    
      public:
      
    
    };
    

    Irgendwas habe ich missverstanden in diesem Thema. 😞

    Ich würde das folgendermaßen schreiben:

    class x{
    
    private:
    
    int a;
    sting name;  
    
    public:
    
    x(int a, string name)
    {
      // ...
    }  
    
    };
    


  • huzzm schrieb:

    ..

    Hi, danke. Jetzt klappt alles soweit.

    Hab den Teil bei mir gelöscht und nochmal abgetippt. Wahrscheinlich hatte ich noch irgendwo was vergessen.


Anmelden zum Antworten