conversion from derived * to base * exists but is inaccessible

C++Inheritance

C++ Problem Overview


Why does the follwing code produce this error even though c is a struct and has a public inheritance by default??

struct c 
{
protected:
	int i;
public:
	c(int ii=0):i(ii){}
	virtual c *fun();
};

c* c::fun(){
	cout<<"in c";
	return &c();
}

class d : c
{
 public:
	d(){}
	d* fun()
	{
		i = 9;
		cout<<"in d"<<'\t'<<i;
		return &d();
	}
};


int main()
{
	c *cc;
	d dd;
	cc = &dd;
	cc->fun();
}

C++ Solutions


Solution 1 - C++

You need:

class d : public c

class inheritance is private by default.

When you privately inherit from a class or a struct, you explicitly say, among other things, that direct conversion from a derived type to a base type isn't possible.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser1232138View Question on Stackoverflow
Solution 1 - C++Luchian GrigoreView Answer on Stackoverflow