Ich habe Funktion, die const Referenz als Argument akzeptiert. Es sollte das Argument nicht ändern, aber es tut (Variable "_isVertex"). Wie kann das behoben werden? Hier ist der Code:Funktion ändert const Objekt
#include <vector>
#include <iostream>
using namespace std;
class Element
{
public:
bool isVertex() const
{ return _isVertex; };
private:
bool _isVertex = true;
};
class ElementContainer : public vector <Element>
{
public:
void push(const Element &t)
{
// here everything is fine
cerr << t.isVertex() << ' ';
push_back(t);
// and here _isVertex is false, should be true!
cerr << t.isVertex() << '\n';
}
};
int main()
{
ElementContainer vertex;
vertex.push({});
vertex.push(vertex[0]);
}
Plus eins: du hast mich. Beachten Sie, dass die C++ - Standardbibliothekscontainer nicht als Basisklassen konzipiert sind. – Bathsheba
'const' am Ende der Funktionsdeklaration garantiert nur, dass sich der Zustand der Klasse durch den Aufruf der Funktion nicht ändert. Der zurückgegebene Wert ist nicht const und kann nachträglich geändert werden. –