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 schonOder 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