Zeiger auf Array in Klasse übergeben



  • Der aus dem Westen ... schrieb:

    #define MAX_LENGHT_X 20
    #define MAX_LENGHT_Y 25
    

    Pfui!
    Die Arraylängen mit zu übergeben ist zwar ein guter Tip, aber die Längen per #define festzulegen ist bestenfalls unschön. Das mag in C zwar so üblich sein, in C++ nimmt man aber Konstanten vom richtigen Typ.



  • Mach ich immer so - spart Speicher 😃
    Manche sagen, ich bin verrückt, dabei bin ich bloss Perfektionist.



  • ...in C++ nimmt man aber Konstanten vom richtigen Typ

    verträgt sich aber nicht damit: 🙂

    ... dabei bin ich bloss Perfektionist.



  • Wenn man Speicher sparen will, schon.
    Es kommt immer auf den Blickwinkel an. Was ist wichtiger, ein funktionierendes, schnelles und speichersparendes Program oder ein schöner, toller Code?



  • Ich stelle sogar die Warnstufe auf 4 und behandele jede Warnung als Fehler. Was willst du mehr?



  • Ich sage mal ein schnelles funktionierendes Programm mit schönen tollem (dem Standard entsprechenden) Code. 😉



  • Der aus dem Westen ... schrieb:

    Mach ich immer so - spart Speicher 😃
    Manche sagen, ich bin verrückt, dabei bin ich bloss Perfektionist.

    Das spart bei nem Int auf normalen Maschinen ganze 4 Byte Speicher. Von diversen Megabyte die dir zur Verfügung stehen. Dafür handelst du dir beim Debuggen fest einkompilierte Magic Numbers an Stelle von benannten Konstanten ein, verlierst die Typsicherheit die bei C++ eingebaut ist und läufst auf seltsame Fehler wenn die Textersetzung sich nicht ganz so verhält wie du es erwartest. Das hat mit Perfektionismus nicht viel zu tun. Vgl. auch Scott Meyers Effective C++, erstes Kapitel.



  • Du hast speicherschonend vergessen. Da siehst du, wie weit dieser Perfektionismus geht. Funktionalität kommt vor Schönheit.



  • Der aus dem Westen ... schrieb:

    Wenn man Speicher sparen will, schon.
    Es kommt immer auf den Blickwinkel an. Was ist wichtiger, ein funktionierendes, schnelles und speichersparendes Program oder ein schöner, toller Code?

    Ein funktionierendes, schnelles und speichersparendes Programm mit lesbarem, wartbarem und leicht debuggbarem Code. Die Konstanten werden im Release-Build eh in den Code reincompiliert, da gibts dann keinen Unterschied mehr.



  • Der aus dem Westen ... schrieb:

    Mach ich immer so - spart Speicher 😃
    Manche sagen, ich bin verrückt, dabei bin ich bloss Perfektionist.

    Das einzige, was Du machst, ist zu verhindern, daß die World.hpp mit

    #define MAX_LENGHT_X 20
    #define MAX_LENGHT_Y 25
    

    Screen.hpp mit

    #define MAX_LENGHT_X 80
    #define MAX_LENGHT_Y 25
    

    inkludieren kann.

    Ein kleines

    class MyClass
    {
    public:
       static int const MAX_LENGHT_X=20;
       static int const MAX_LENGHT_Y=25;
    

    verbraucht natürlich keinen Speicher.



  • Vielen Dank für die schnellen Antworten. 🙂

    Das Problem besteht jedoch weiterhin. 😞

    Ich muss das Array schon im Konstruktor übergeben und als Klassenattribut(Zeiger?) speichern. Das versuche ich, wie angegeben:

    MyEventReceiver(short *smap) {
    
    // Konstruktor
    
    }
    
    // in main():
    
    MyEventReceiver receiver(map);
    

    Dann meckert der Debugger jedoch.

    Konvertierung des Parameters 1 von 'short [12][15]' in 'short *' nicht möglich



  • Im zweiten Post steht doch, wie es richtig geht..



  • Der aus dem Westen ... schrieb:

    Wenn man Speicher sparen will, schon.

    Wechen Speicher?

    const int dings = 23;
    

    dings besitzt in diesem Fall "internal linkage" und solange Du den Adressoperator nicht drauf anwendest, muss ein Compiler für dings auch keinen Speicher reservieren. Die 23 kann der Compiler einfach überall da eingesetzt, wo dings steht -- wenn er es denn möchte.

    @th3AddY: Guck Dir nochmal meine erste Antwort an.

    Gruß,
    SP



  • Ah ok. Sry, ich hab da was übersehen. Jetzt funktioniert es auf jeden Fall. 🙂

    Vielen Dank. 😉


Anmelden zum Antworten