Methoden werden nicht ausgeführt



  • Pria schrieb:

    kein c++ 11 vorhanden

    Deswegen schlägt Sone ja die letzte Möglichkeit vor.



  • Edit: Nein, meine Version ist auch irre riesig. Im verlinkten Thread gibt es natürlich direktere Varianten.



  • Sone schrieb:

    Das inline ist bei Konstruktoren übrigens völlig überflüssig.

    Wie meinst du das? Klingt vollkommen falsch.



  • Sone schrieb:

    Und wo wird toInit initialisiert?

    garnicht, ist zumindest im inspektor immer initial false

    wie würde das letzte beispiel konkret in ausfürbarem code aussehen? ich brauche tatsächlich etwas, dass initial bei der objekterzeugung die statische initialfunktion auslöst und sich leicht in den klassencode einfügen lässt. Das wir unter anderem benutzt um funktionsbindungen zu erstellen, wenn der anwender das vergessen sollte fliegt ihm ansonsten der code um die ohren, deswegen möchte ich das direkt in die cpp der jeweiligen klasse integrieren.


  • Mod

    Pria schrieb:

    Das wir unter anderem benutzt um funktionsbindungen zu erstellen, wenn der anwender das vergessen sollte fliegt ihm ansonsten der code um die ohren, deswegen möchte ich das direkt in die cpp der jeweiligen klasse integrieren.

    Erzähl mal mehr. Idealziel in C++ ist, dass man alle Programmierfehler zur Compilezeit abfängt und nicht erst zur Laufzeit auftreten lässt. Aufgrund der strengen Regeln in C++ ist dies in sehr vielen Fällen möglich.



  • SeppJ schrieb:

    Erzähl mal mehr. Idealziel in C++ ist, dass man alle Programmierfehler zur Compilezeit abfängt und nicht erst zur Laufzeit auftreten lässt. Aufgrund der strengen Regeln in C++ ist dies in sehr vielen Fällen möglich.

    z.b. OpenGL Shading

    class Shader
    {
       public:
          static_ctor()
          {
              CreateShader.Bind(GetProcAddress("glCreateShader")); assert(CreateShader); //dynamic linking
              ...
          }
    
          bool Create(?? type)
          {
              uint handle = CreateShader(type); //crashes if not bound, null-pointer exception
              return (uint != 0);
          }
    };
    


  • Wie würde es sich denn bei folgender Änderung verhalten?

    template<typename T>
    class static_ctor
    {
        typedef bool (*ptr) ();
        bool toInit;
    
        public:
            inline static_ctor(ptr _init)
            {
                if(!toInit)
                    toInit = _init();
            }
    };
    
    class test : public static_ctor<test>
    {
       public:
          static void init();
          test() : static_ctor<test>(&test::init) {}
    };
    


  • Bashar schrieb:

    Sone schrieb:

    Das inline ist bei Konstruktoren übrigens völlig überflüssig.

    Wie meinst du das? Klingt vollkommen falsch.

    Gut, da war ich zu pauschal. Wenn man eine Memberfunktion in der Klasse definiert wird, dann ist sie automatisch inline , darauf spielte ich an.



  • So, habe das Problem nach etwas Grübeln soweit gelöst, indem ich das wie bereits in meinem letzten Post abgeändert und in den Klassen einen Funktionspointer definiert habe, der anstatt dem T::-init ausgeführt werden soll.

    Danach hat sich das Problem erledigt, ich vermute war entweder ein Linker oder Optimizer problem.


  • Mod

    Pria schrieb:

    Danach hat sich das Problem erledigt, ich vermute war entweder ein Linker oder Optimizer problem.

    😮 Das war ein simpler Anfängerfehler! Sone hat ihn dir erklärt! Es bedarf wohl einer speziellen Art Mensch, um da trotzdem die Fehler noch woanders zu suchen. Ich sehe da bei so einer Einstellung Schwarz für deine künftigen Programmierunternehmen.

    Deine Antwort auf meine Gegenfrage, was das Ganze überhaupt soll, fand ich auch nicht befriedigend, aber das ist dein Problem, wenn du keine bessere Hilfe möchtest, werde ich mich nicht aufdrängen. Aber obiger Absatz musste gesagt sein. Vielgetestete Programme laufen korrekt für alles was du jemals ausprobieren wirst. Die Fehler liegen bei dir, du musst sie auch dort suchen, wenn du jemals besser werden möchtest.


Anmelden zum Antworten