Kein Kopierkonstruktor verfügbar
-
Hallo,
ich erhalte von Visual C++ folgende Fehlermeldung, die ich mir nicht erklären kann
:class 'NetPackage': Kein Kopierkonstruktor verfügbar oder der Kopierkonstruktor is als 'explicit' deklariert
NetPackage.h:
class NetPackage { public: NetPackage(void); NetPackage(NetPackage &npkg); ~NetPackage(void); // ... };// ... NetPackage::NetPackage(NetPackage &npkg) { // Kopieren des dynamisch reservierten Puffers: // ... } // ...Hat jemand eine Idee, an was das liegen könnte?
-
Am fehlende const ...
NetPackage(const NetPackage &npkg);und
NetPackage::NetPackage(const NetPackage &npkg) {
-
ist das const echt vorgeschrieben? also vom std?
-
Ohne const ist es ein normaler Konstruktor mit entsprechendem Parameter - glaub ich.
-
aber syntaktisch doch ists doch gleich.
und const ist ja eh nur ein schlüsselwort für den compiler, dass der optimieren kann bzw. den user warnt falls er was macht, was er nicht will
-
Funktioniert, vielen Dank!

Hätte auch nicht gedacht, dass const vorgeschrieben ist.
-
Die Stelle, bei der der Fehler auftaucht, wurde nicht gezeigt. const ist im Übrigen nicht vorgeschrieben, auch ein Foo(Foo&) ist ein Kopierkonstruktor, der aber (offensichtlich) keine konstanten Objekte oder rvalues kopieren kann.
-
Klar, keine Funktion/Methode mit einem nicht - const Parameter kann const - Argumente annehmen.
Will sagen, das gilt nicht nur für Konstruktoren.
-
Skym0sh0 schrieb:
aber syntaktisch doch ists doch gleich.
und const ist ja eh nur ein schlüsselwort für den compiler, dass der optimieren kann bzw. den user warnt falls er was macht, was er nicht willNö. const bedeutet hier, dass die Funktion das Objekt nicht ändern kann. Eine wichtige Eigenschaft für Leute, die auf const-correctnes achten. (Wie's auch sein soll.)
-
-.- war klar dass du wieder ankommst.
da ache ich auch drauf. aber letztlich sieht man es im assembler code ja gar nicht mehr. sprich die werte werden vom compiler hart in den assembler code reingesetzt. oder der andere fall sind halt compiler fehler wenn mans doch ändern will.
aber ist ja auch egal. wir wissen wofür es ist und die frage war, ob der copy CTor das const zwingend verlangt
-
Schön wie du dich versucht rauszureden Schnucki. <333
-
Skym0sh0 schrieb:
aber syntaktisch doch ists doch gleich.
und const ist ja eh nur ein schlüsselwort für den compiler, dass der optimieren kann bzw. den user warnt falls er was macht, was er nicht willDas wäre ein Fehler, keine Warnung.
Natürlich muss das Argument des Kopierkonstruktors
constübergeben werden. Woher soll der Compiler wissen, dass der Konstruktor das übergebene Objekt nicht ändert?constist ja gerade die Markierung für Objekte, die nicht geändert werden dürfen.Was mit nicht-
const"Kopier"konstruktoren passiert, sieht man anauto_ptr. Eine ganz fiese Semantik, deswegen ist das Ding deprecated.