Ergebnistyp für Konstruktor nicht erlaubt



  • Genau, so heißt die Fehlermeldung:

    So sieht es aus:

    #define DLLEXPORT _cdeclspec(dllexport)
    class DLLEXPORT me2DMap
    {
    public:
      me2DMap();
    };
    
    me2DMap::me2DMap()
    {
    	ZeroMemory(this, sizeof(me2DMap));
    }
    

    was ist da schon wieder dran flasch?



  • Hallo,

    ich kann irgendwie keinen Fehler erkennen. Aber:

    Das hat a) nichts mit Standard C++ zu tun, also wirst du wohl eher
    ins WinAPI-Forum gehen muessen (oder BCB, je nach dem was du nutzt).

    Und b), wenn ZeroMemory wirklich das tut, was der Name sagt, wird
    diese Funktion ziemlich boeses anrichten.

    mfg
    v R



  • Was macht denn der Konstruktor böses?

    Ich habs immer noch nciht hingekriegt buhu 😞



  • Hat sichs erledigt. so sahs aus:

    enum x
    {
    a, b, c
    }
    
    me2DMap::me2DMap()
    {
    //..
    }
    

    Dummer fehler...



  • Das kommt davon wenn man Code postet, der den Fehler überhaupt nicht erzeugt 😉



  • Maxi2 schrieb:

    Was macht denn der Konstruktor böses?

    Den Speicher des Objekts überschreiben. Wenn der Compiler noch irgendetwas Unsichtbares im Objekt unterbringt, und das wird er vermutlich spätestens wenn die Klasse polymorph ist, überschreibst du ihm das einfach. Bei den meisten Datentypen ist ZeroMemory() sowieso nicht portabel, Zeiger werden dadurch z.B. nicht garantiert auf 0 gesetzt. Wenn dein Objekt so viele Felder hat, dass du sie nur mit ZeroMemory in den Griff bekommst, solltest du das Design vielleicht nochmal überdenken 🙂



  • Naja, es sind schon ganz schön viele Arrays...

    Soll ne 2d-Karte werden, da brauch ich dann eben die Vertizes ein Array, ein Array für die Texturen, ein Array für die Tiles(welche Koordinaten auf der Textur), ein Array dür die Daten, ein Array für die ANzahl der Tiles usw...

    Weiß keien andere Lösung



  • Den Klassen für Vertices, Texturen etc. einen Konstruktor geben, std::fill verwenden, den Containern im Konstruktor eine "genullte" Instanz mitgeben? Kreativität ist alles! 😉


Log in to reply