Merkwürdiger Fehler: New akzeptiert keine zwei Parameter
-
VC++ hat mit das beim kompilieren meines momentanen Projekts ausgegeben. Die Headerdatei, in der der Fehler liegt ist xmemory.
Hier die Fehler:c:\programme\microsoft visual studio\vc98\include\xmemory(34) : error C2660: 'new' : Funktion akzeptiert keine 2 Parameter c:\programme\microsoft visual studio\vc98\include\xmemory(66) : Siehe Verweis auf Instantiierung der kompilierten Funktionsvorlage 'void __cdecl std::_Construct(class Unit *,const class Unit &)' c:\programme\microsoft visual studio\vc98\include\xmemory(34) : error C2660: 'new' : Funktion akzeptiert keine 2 Parameter c:\programme\microsoft visual studio\vc98\include\xmemory(66) : Siehe Verweis auf Instantiierung der kompilierten Funktionsvorlage 'void __cdecl std::_Construct(class SmartDecoState<class Building> *,const class SmartDecoState<class Building > &)' Fehler beim Ausführen von cl.exe. PNFramework_5.dll - 2 Fehler, 0 Warnung(en)
Leider weis ich nicht welchen Quellcode ich Posten soll, aber das hier hilft sicher weiter:
template <> class Base<true> { protected: virtual inline void del(){} private: inline ~Base(){} public: Base(){} virtual void destroy(){del(); delete this;} friend void* operator new(size_t); friend void operator delete(void*, size_t); }; template <> class Base<false> { public: Base(){} virtual ~Base(){} private: static void* operator new(size_t size){return 0;} static void operator delete(void* rawmemory){} static void* operator new[](size_t size){return 0;} static void operator delete[](void* rawmemory){} }; template <typename T> class DLL SmartDecoState : public Base<false>//Smart_ptr + Decorator + State { protected: int* refcount; T* ptr; public: inline SmartDecoState(){ptr = __new<T>(); refcount = new int(1);} explicit inline SmartDecoState(T* nptr, int* nref):ptr(nptr),refcount(nref){(*refcount)++;} DLL inline SmartDecoState(const SmartDecoState<T>& param); virtual ~SmartDecoState(){if(*refcount == 1){ptr->destroy();delete refcount;}else (*refcount)--;} DLL inline void newUnit(T* nptr, int* nref); DLL SmartDecoState<T>& operator=(const SmartDecoState<T>& param); DLL T* operator->() const; DLL T& operator *() const; }; class DLL Unit : public SmartDecoState<Warrior_base> { public: friend bool ::letitdie(Unit* ptr); inline void setdmga(int& ndmga); inline void setdmgg(int& ndmgg); inline void setdmg(int& ndmg); inline void setHP(int& nHP); inline void setHP_max(int& nHP_max); inline void setmana(int& nmana); inline void setarmor(int& narmor); inline void setfast(int& nfast); inline void setsee(int& nsee); inline void setfreq(int& nfreq); inline void setradius(int& nradius); inline void setflying(bool& nflying); inline void setgive_exp(int& ngive_exp); inline void setnow_exp(int& nnow_exp); inline void setneeded_exp(int& nneeded_exp); inline void setlevel(int& nlevel); inline void setneededsupport(int& nsupport); inline int getdmga() const {if(ptr){return ptr->getdmga();}return 0;} inline int getdmgg() const {if(ptr){return ptr->getdmgg();}return 0;} inline int getdmg() const {if(ptr){return ptr->getdmg();}return 0;} inline int getHP() const {if(ptr){return ptr->getHP();}return 0;} inline int getHP_max() const {if(ptr){return ptr->getHP_max();}return 0;} inline int getmana() const {if(ptr){return ptr->getmana();}return 0;} inline int getarmor() const {if(ptr){return ptr->getarmor();}return 0;} inline int getfast() const {if(ptr){return ptr->getfast();}return 0;} inline int getsee() const {if(ptr){return ptr->getsee();}return 0;} inline int getfreq() const {if(ptr){return ptr->getfreq();}return 0;} inline int getradius() const {if(ptr){return ptr->getradius();}return 0;} inline bool getflying() const {if(ptr){return ptr->getflying();}return false;} inline int getgive_exp() const {if(ptr){return ptr->getgive_exp();}return 0;} inline int getnow_exp() const {if(ptr){return ptr->getnow_exp();}return 0;} inline int getneeded_exp() const {if(ptr){return ptr->getneeded_exp();}return 0;} inline int getlevel() const {if(ptr){return ptr->getlevel();}return 0;} inline int getneededsupport() const {if(ptr){ptr->getneededsupport();}return 0;} explicit Unit(Warrior_base* nptr, int* nrefcount); bool attack(Unit* opponent); bool magic(Unit* opponent, int mkdmg); protected: bool levelup(); };
Sorry wenn da jetzt Fehler drin sind, ist ziemlich ausm Zusammenhang gerissen.
thx im vorraus ^^
Glamdring
-
nein das hilft nicht weiter!
im fehler gibts ne zeilenangabe,wenn in der zeile ein new ist, dann kannste die zeile alleine bzw mit der definition/deklaration von new posten.
so hat hier keiner lust auch nur einen blick dran zu vergeuden.und noch ein wort zum montag:
inline SmartDecoState(){ptr = __new<T>(); refcount = new int(1);}
für den code und generell diese kurzschreibweise könnt ich dich umbringen^^
eine anweisung=eine Zeile.
zwei Anweisungen=Zwei Zeilen.
...
und da ich weis wie du die Klasse aufbaun wolltest,geb ich dir direkt noch einen Drauf^^
du willst die Klasse in main mittels new instanzieren, dann macht es absolut keinen sinn, sowas wie
T* ptr;
ptr=new T;
innerhalb der Klasse zu schreiben,
T ptr reicht vollkommen aus,da mit der instanzierung der Klasse aufm heap direkt auch für T ptr genug speicherplatz reserviert wird.
desweiteren ist refcount = new int(1);} absolut hirnrissig.
int refcount;
refcount=1;
und der 3. punkt auf meiner Klage liste ist: wieso leitest du eine Klasse aus einer andren Klasse ab, von der du weist dass sie nicht das erfüllen kann, was du willst.(ich meine hiermit Base<true>)
-
Zu Punkt 1: Das ind Smartptr, d.h. sie werden niemals mit new erzeugt bzw. es macht keinen Sinn.
Zu Punkt 2: Die Smartptr sind refcounted, deshalb muss das ein Pointer sein
Zu Punkt 3: Um zu testen wo der Fehler liegt
Glamdring
-
P.S.: glaubst du wirklich, das es etwas helfen würde dir die Codezeile aus xmemory zu geben (welches, damit es nicht zu verwechslungen kommt, vom Compiler genutzt wird).