nonstatic member reference must be relative to a specific object Fixieren



  • Hallo zusammen,

    ich habe es folgende:

    classA :public classB, public classC, public classD
    {
        public:
        typedef enum enMeasure {enUndef, enMus1, enMus2, enMus3, enMus4}   t_enMeasure;
    ....
        classE instanzE;
    	t_enMeasure getMeasureType()
    	{
    		if (settings.strfuGetMeasureType() == "128")
    			return enMus1;
    		if (settings.strfuGetMeasureType() == "256")
    			return enMus2;
    		if (settings.strfuGetMeasureType() == "512")
    			return enMus3;
    		if (settings.strfuGetMeasureType() == "1024")
    			return enMus4;
    		if (settings.strfuGetMeasureType() == "2048")
    			return enMus5;
    	}
    
        classA(getMeasureType(),.....);//Hier habe ich die oben genannten Fehler
    //nonstatic member reference must be relative to a specific object Fixieren
    // Ich kann auch so machen:
    classA(enMus1,.....); // aber ist dann die Konstante hardcodiert und das muss nicht sein.
    // Idee ist aus einen LogFile die Konstante einfach zu lesen und das ist eigentlich was mit der Funktion getMeasureType() geschieht.
    
    };
    

    danke



  • Poste code, mit dem Dein Fehler reproduzierbar ist. Ich kann nicht erkennen, was du willst.

    VG



  • Problem habe ich eigentlich bei dieses Konstruktor:

    classA(getMeasureType(),.....);
    

    Er mekert, dass

    getMeasureType()
    

    nicht als statische Funktion definiert ist.
    Problem lässt sich aufheben wenn ich so z.B schreibe:

    classA(enMus1,.....);
    


  • AlexGast schrieb:

    Problem habe ich eigentlich bei dieses Konstruktor:

    classA(getMeasureType(),.....);
    

    Er mekert, dass

    getMeasureType()
    

    nicht als statische Funktion definiert ist.
    Problem lässt sich aufheben wenn ich so z.B schreibe:

    classA(enMus1,.....);
    

    Oder aber Du rufst getMeasureType mit einem Objekt auf oder Du machst getMeasureType static.

    VG



  • Sorry so lässt sich der Fehler aufheben:

    classA(enMeasure typMeasure = enMus1,.....);
    


  • mgaeckler schrieb:

    Oder aber Du rufst getMeasureType mit einem Objekt auf oder Du machst getMeasureType static.

    Ich habe nicht zu 100% versatnden was du meinst.
    getMeasureType() kann ich die als static Methode deklarieren dann muss ich auch
    Änderung auch in der andere klasse hin in dem Fall "classE " und das möchte ich nicht unbedingt


  • Mod

    AlexGast schrieb:

    Problem habe ich eigentlich bei dieses Konstruktor:

    classA(getMeasureType(),.....);
    

    Das ist kein Konstruktor. Und ..... ist keine gültige Syntax in irgendeinem Kontext. Es ist in Ordnung, unwesentlichen Code auszulassen; du solltest aber nicht gerade die Stellen verstümmeln, die unmittelbar Fehler verursachen, u.a. kann dies die Art des Problems verändern.
    Beispiel:

    classA(getMeasureType());
    

    wäre eine mögliche Deklaration. Der Compiler würde sich allerdings trotzdem beschweren.


  • Mod

    camper schrieb:

    Das ist kein Konstruktor. Und ..... ist keine gültige Syntax in irgendeinem Kontext.

    template <typename... Args>
    void f(Args......);
    


  • Vielleicht solltes du mal beschreiben, was du vorhast.

    Es klingt, als möchtest du an den Konstruktor einer Klasse einen Wert übergeben, den du aus einer Datei ermittelst. Dann mach doch aus "getMeasureType" z.B. eine freie Funktion und rufe diese auf, wenn du eine Instanz von classA erstellst.

    enMeasure getMeasureType()
    {
      // ...
    }
    
    classA classA
    {
      public:
        classA(enMeasure measureType) : blub(measureType) {};
      private:
        measureType blub;
    }
    
    // Instanz von classA erstellen
    classA a(getMeasureType());
    

    Es könnte aber auch sein, dass classA sich diesen Wert selbständig aus der Datei holen soll, dann ruf die bestehende Klassenfunktion im Code des Konstruktors auf.

    class classA
    {
      public:
        classA()
        {
           blub = getMeasureType();
        }
      private:
        measureType getMeasureType()
        {
          // ...
        }
        measureType blub;
    }
    

  • Mod

    Arcoth schrieb:

    camper schrieb:

    Das ist kein Konstruktor. Und ..... ist keine gültige Syntax in irgendeinem Kontext.

    template <typename... Args>
    void f(Args......);
    

    6 Punkte. Er hat nur 5 verwendet.


  • Mod

    camper schrieb:

    Arcoth schrieb:

    camper schrieb:

    Das ist kein Konstruktor. Und ..... ist keine gültige Syntax in irgendeinem Kontext.

    template <typename... Args>
    void f(Args......);
    

    6 Punkte. Er hat nur 5 verwendet.

    Ich wusste einfach, dass das kommt. 😃 Hatte gehofft du würdest es übersehen.


Log in to reply