pomoc z obiektem

0

witam mam problem z wyświetleniem zawartości klasy A w voidzie, kod błędu kompilatora napisałem na dole i nie mam bladego pojęcia dlaczego nie działa, takie samo rozwiązanie miałem podane w materiałach z wykładu.

#include <iostream>
#include <cstdlib>
using namespace std;

class A {
protected: int a;
public: A(int _a) {a=_a;};
};
                
class B:
public  A  {
protected: float b;       
public: B(int _a, float _b):A(_a) {b=_b;};
};

class C:
private A {
protected: char c;
public: C(int _a, char _c):A(_a) {c=_c;};
};

class D:
public  A{
protected: double d;       
public: D(int _a, double _d):A(_a) {d=_d;};
};

class E:
public B,
public C,
public D {
protected: int a; 
public: E(int _a,float _b, char _c, double _d, int _e):B(_a,_b),C(_a,_c),D(_a,_d),a(_e){};
void pokaz();}; 
      
void E::pokaz()
{ cout << A::a << " " << B::b << " " << C::c << " " << D::d << " " << a << endl; };

int main(int argc, char *argv[])
{ E obiekt(1,2.5,'a',1.1e34,100);
A *wskaznik;
obiekt.pokaz();

system("PAUSE");
return EXIT_SUCCESS;
}
 
 A:\Biblioteki\Pictures\Untitled3.cpp In member function `void E::pokaz()': 
37 A:\Biblioteki\Pictures\Untitled3.cpp `A' is an ambiguous base of `E'
0

no to teraz policz ile razy E dziedziczy po A

0

ja to rozumiem jednak w zadaniu mam powiedziane (tak to zadanie z kolosa) że nie mogę przerabiać klass a jedynie dodać metody i konstruktory w celu umożliwienia wyświetlenia tych wartości.

jak jest potrzeba to dodaję kod początkowy.

class A {protected: int a;};
class B:public  A {protected: float b;};
class C:private A {protected: char c;};
class D:public  A {protected: double d;};
class E:public  B, public C, public D {int a;};

int main(int argc, char *argv[])
{ E obiekt(1,2.5, 'a', 1.1e34, 100);
A *wskaznik;

system ("pause");
return success;
}
0

to jest niepraktyczne i jak dla mnie za dużo ciapania z tym, zacznij od wyświetlenia samego A potem B potem C potem D i potem E

0

przy próbie wyświetlenia zawartości samej klasy A zwraca mi że mam 3 możliwości (3xa) zaś nie mogę zrezygnować z żadnego przypisania w konstruktorach z B,C,D gdyż to się mija z celem zadania a bez nich program nie ruszy...

0

zrobiłem Ci dla B, z resztą powalcz sam, aby nie być totalnie zielonym

#include <iostream>

class A
{
public:
	A(int a) : a(a) {}
protected:
	int a;
};

class B : public A
{
public:
	B(int a, float b) : A(a), b(b) {}

	void print() { std::cout << "\nb -> " << b << " my a -> " << a; }
protected:
	float b;
};

class C : private A
{
public:
	C(int a, char c) : A(a), c(c) {}
protected:
	char c;
};

class D : public A
{
public:
	D(int a, double d) : A(a), d(d) {}
protected:
	double d;
};

class E : public B,
		  public C,
		  public D
{
public:
	E(int a, float b, char c, double d) : B(a, b), C(a, c), D(a, d), a(a) {}

	void print();
private:
	int a;
};

void E::print()
{
	static_cast<B*>(this)->print();
}

int main()
{
	E e(1, 2.3, 'c', -12.3);
	e.print();

	return 0;
}

http://melpon.org/wandbox/permlink/2PlJo6JnZ45axPCM

0

dziękuję i doceniam, na pewno też poszukam rozwiązania innego :). myślę ze temat do zamknięcia

1 użytkowników online, w tym zalogowanych: 0, gości: 1