Hallo
Ich habe eine Klasse A, in der einige Memberfunktionen als pure-virtual deklariert sind:
|
C-/C++-Quelltext
|
1
2
3
4
5
|
class A
{
public:
virtual void set (const int& n) = 0;
};
|
Von A abgeleitet gibt es eine Klasse B, die diese Funktionen definiert.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
|
class B : public A
{
public:
void set (const int& n);
private:
B (const B&) { }
};
|
Ferner habe ich noch eine Klasse C, die von B abgeleitet ist, und D, die von C abgeleitet ist.
Sowohl C als auch D haben einen als public deklarierten Copy-Konstruktor.
Nun habe ich eine Funktion, die folgendermaßen definiert ist:
|
C-/C++-Quelltext
|
1
2
3
4
|
void f (D& d)
{
d.set (1);
}
|
Beim Ausführen bekomme ich an dieser Stelle einen Segmentation Fault.
Definiere ich es hingegen wie folgt, funktioniert es:
|
C-/C++-Quelltext
|
1
2
3
4
|
void f (D& d)
{
(static_cast <D> (d)).set (1);
}
|
Warum ist das so? Wie kann ich es anstellen, dass es funktioniert, und das Erstellen einer Kopie von d vermeiden?
Könnte das Problem auch auf Stack Corruption zurückzuführen sein?
Vielen Dank im Voraus
PS. Dass es irgendwie mit den Copy-Konstruktoren zu tun hat, glaube ich nicht, da es nichts ändert, wenn ich den Copy-Konstruktor von A ebenfalls public mache.
Falls ihr noch mehr Informationen braucht, wie etwa die vollständigen Quelltexte, sagt bitte bescheid, ich wollte euch aber nicht direkt erschlagen