const Problem
-
Ich habe diverse Probleme mit const und sehe nicht was falsch ist. Das hier ist die Fehlermeldung:
In file included from ..\include\qtdevices\CommonPositioningController.cpp:2:
..\include\qtdevices\/CommonPositioningStage.h: In member function 'CommonPositioningStage& CommonPositioningStage::operator=(const CommonPositioningStage&)':
..\include\qtdevices\/CommonPositioningStage.h:24: error: non-static const member 'CommonPositioningStagePrivate* const CommonPositioningStage::d', can't use default assignment operator
..\include\qtdevices\CommonPositioningController.cpp: In member function 'CommonPositioningStage CommonPositioningController::stage()':
..\include\qtdevices\CommonPositioningController.cpp:115: note: synthesized method 'CommonPositioningStage& CommonPositioningStage::operator=(const CommonPositioningStage&)' first required hereund das ganze wegen der Aufrufe von addStage und axisNumber zusammen mit dem d-Pointer.
class CommonPositioningControllerPrivate { public: CommonPositioningControllerPrivate(){} QVector<CommonPositioningStage> stageProperties; }; CommonPositioningController::CommonPositioningController() :d(new CommonPositioningControllerPrivate) { } bool CommonPositioningController::addStage(CommonPositioningStage & newStage) { bool axisAlreadyExists = false; for (int i = 0; i < d->stageProperties.size(); ++i) { if (d->stageProperties.at(i).axisNumber() == newStage.axisNumber()) { ... } int CommonPositioningStage::axisNumber() const { return d->axisNumber; }lasse ich das const bei CommonPositioningStage::axisNumber() weg (wegen Problemen mit dem d-Pointer), dann erhalte ich noch mehr Fehlermeldungen,
alle in CommonPositioningController::axisNumber bezüglich non const von CommonPositioningStage::axisNumber():int CommonPositioningController::axisNumber(int stageListIndex) const { return d->stageProperties.at(stageListIndex).axisNumber(); }..\include\qtdevices\CommonPositioningController.cpp: In member function 'bool CommonPositioningController::addStage(CommonPositioningStage&)':
..\include\qtdevices\CommonPositioningController.cpp:47: error: passing 'const CommonPositioningStage' as 'this' argument of 'int CommonPositioningStage::axisNumber()' discards qualifierswenn ich auch CommonPositioningController::axisNumber das const weglasse bleiben die Fehler erhalten.
Was ist der eigentliche Fehler?
-
Was ist denn d, und wie ist es deklariert?
-
Ich bin inzwischen darauf gekommen, das at(i) const ist und daher alle funktionen davon const sein müssen. Da ich den Bereich in der Klasse sowieso vorher prüfe, habe ich jetzt einfach alles in [i] geändert.
Zudem kopiere ich eine Klasse mit d-pointer, und brauche dafür einen manuellen Zuweisungsoperator. Nachdem ich auch das eingebaut habe geht jetzt alles.
Der d-pointer war const deklariert, da ich aber einen zuweisungsoperator brauchte, jetzt nicht mehr.
-
pospiech schrieb:
Ich bin inzwischen darauf gekommen, das at(i) [...]
Wenn es sich um einen
std::vectorhandelt, dann gibt es eigentlich sowohl eineconstals auch einenon-constVersion vonat().
-
Es handelt sich aber um QVector und da gibt es nur die const Variante von at. Man könnte hier statt desse den operator[] verwenden. Den gibt es wieder in beiden Varianten.
-
pospiech schrieb:
Was ist der eigentliche Fehler?
Der eigentliche Fehler ist, dass du eine nichttriviale Klasse
CommonPositioningStageohne einen adäquaten op= definiert hast. Der Compiler versucht ihn zu generieren, weil du ihn irgendwo explizit oder iplizit benutzt, und fällt damit auf die Nase.