C++ Kein Zugriff auf geerbte Funktionen

KingJoshii1000

Lieutenant
Registriert
Apr. 2010
Beiträge
879
Hallo,
ich habe mich ein wenig mit der vererbung von Klassen beschäftigt und bekommen bei folgendem Code den Error:
9IntelliSense: Auf "Funktion "class0::change_value0" (deklariert in Zeile 6)" kann nicht zugegriffen werden. Main.cpp 22 5 Uebung
Code:
class class0{
public:
	void change_value0(int Value){ value = Value; }
protected:
	class0()
		:value(-1){}
private:
	int value;
};
class class1 : class0{
public:
	class1(){}
	void change_value1(int Value){ value1 = Value; }
private:
	int value1;
};
int main(){
	class1 c1;
	c1.change_value0(100); //Hier tritt der Fehler auf
}
Wie gesagt, relativ simpel gehalten, es dient ja zu Übungszwecken. Wo liegt der Fehler?

Mit freundlichen Grüßen und wünsche einen guten Rutsch ins neue Jahr :)
 
Da in class1 die Funktion change_value0 nicht deklariert ist, kann man über c1 so auch nicht darauf zugreifen.
Das geht so nur, wenn du c1 explizit castest...
Code:
((class0)c1).change_value0(100)
 
Wenn du das so haben willst dass deine Variante funktioniert muss die Funktion "virtual" sein.

Ich glaube in C++ läuft das unter statisches/dynamisches erben, ließ das mal nach. Ist bei mir schon etwas her, sorry.
 
3murmeln schrieb:
Da in class1 die Funktion change_value0 nicht deklariert ist, kann man über c1 so auch nicht darauf zugreifen.
Das geht so nur, wenn du c1 explizit castest...
Code:
((class0)c1).change_value0(100)

Quatsch. Wenn man keine Ahnung hat, lieber mal ...

Wie FreddyMercury schon sagte, es liegt an dem vergessenen public in der Liste der Basisklassen. Ohne das public findet hier private inheritance statt. Das heißt, alle von class0 geerbten Methoden und Datenmember sind in class1 private und damit für die Außenwelt nicht verwendbar.
Ergänzung ()

tori schrieb:
Wenn du das so haben willst dass deine Variante funktioniert muss die Funktion "virtual" sein.

Ich glaube in C++ läuft das unter statisches/dynamisches erben, ließ das mal nach. Ist bei mir schon etwas her, sorry.

Wie wär's, wenn ihr einfach mal davon abseht, euren Senf dazuzugeben, wenn ihr so offensichtlich keine Ahnung von der Materie habt? Aber nein, da wird lieber auf doofen Dunst irgend welcher Mist behauptet, damit man den OP noch weiter auf den Holzweg bringen kann. :rolleyes:
 
Hallo,
ich habe das Problem gelöst bekommen. Das Problem lag daran, dass Abgeleitete Klassen alle Member der Basisklasse privat erben. Wenn man bei der Deklaration der Klasse jedoch class <klassenname> : public <basisklasse> verwendet, werden die als Public deklarierten Memberfunktionen auch als Public geerbt.

Mit freundlichen Grüßen :)
Wünsche noch ein schönes Wochenende
 
Zurück
Oben