Problem mit Konstruktor



  • Was mache ich falsch??

    Ich möchte ein neues Objekt anlegen:

    help h = new help();
    

    help.h:

    class help
    {
    public:
    	help();
    	~help(void);	
    };
    

    help.cpp

    #include "StdAfx.h"
    #include "help.h"
    
    help::help()
    {
    
    }
    
    help::~help(void)
    {
    }
    

    ich erhalte folgende Fehlermeldung:

    error C2440: 'initializing' : cannot convert from 'help *' to 'help'
    No constructor could take the source type, or constructor overload resolution was ambiguous
    


  • ach ja, ist eine MFC Anwendung erstellt mit Visual Studio 2005



  • new erzeugt einen Pointer auf ein Objekt und übergibt den - also kannst du entweder "help* h = new help();" schreiben oder einfach nur "help h;" (letzteres erzeugt ein Objekt auf dem Stack).

    PS: Du hast nicht zufällig mit Java angefangen?



  • In C++ legst Du ein Objekt entweder direkt an (auf dem Stack), das dann bis zum Ende eines Blocks gültig ist:

    help h; // das war's schon
    

    Oder Du legst ein Objekt auf dem Heap an und speicherst einen Zeiger darauf:

    help* h = new help;
    

    Im zweiten Fall ist das Objekt solange gültig, bis Du es selbst explizit mit delete löscht.



  • Du kommst von Java, richtig?

    In C++ legt man ein Stackobjekt folgendermaßen an:

    help h; // bzw. help h(PARAMETER)
    

    und ein Heapobjekt so:

    help* h = new help; // oder eben = new help(PARAMETER)
    

    der Speicher muss dann aber mittels delete wieder freigegeben werden (c++ hat keinen Garbage Collector!):

    delete h;
    


  • Genau!
    Java ist schuld!!

    DANKESCHÖN


Anmelden zum Antworten