Witam.
Sprawa wygląda mniej więcej tak: Mam kilka klas, klasę A, klasa B i C dziedziczą z A, a klasa D dziedziczy jednocześnie z B i C:
class A
{
public:
char a;
};
class B : public A
{
public:
char b;
};
class C : public A
{
public:
char c;
};
class D : public C, public B
{
public:
char d;
};
Do tego momentu wszystko jest spoko. Jednak w chwili kiedy chcę zrobić coś takiego:
D d;
d.a = 'a';
wyskakuje błąd C2385 - 'ambiguous access of 'a''. Jego naturę rozumiem. Chodzi o to, że kompilator nie wie czy mam na myśli nadanie wartości zmiennej B::a czy C::a. Jednak w moim programie muszą być te wszystkie klasy. B wykonuje czynności, których nie wykonuje klasa C, a klasa D musi dziedziczyć z nich obu.
Wiem, że w klasie D można dać coś takiego:
using B::a;
using C::a;
Z tego co widziałem działa to przy metodach, nie wiem czy przy obiektach także, ale nie chcę tak robić, bo musiałbym napisać z 30 takich linijek. Jest jeszcze możliwość napisać:
class A {};
class B : public A {};
class C : public B {};
class D : public C {};
Jednak to nie działa, ponieważ w kodzie używam szablonów klas i coś się kłóci, a na końcu wyskakuje błąd linkera: LNK2019
Oczywiście te klasy to tylko przykłady, zarys mojego obecnego kodu wygląda tak (Ponieważ używam SFML):
class sf::Transformable
{
public:
void setPosition();
};
class sf::Sprite : public sf::Transformable
{
public:
void openFromFile();
};
class Collidable : public sf::Transformable
{
public:
bool isCollided();
};
class Player : public sf::Sprite, public Collidable
{
public:
void shoot();
};
Jeśli coś nie jest jasne proszę pytać, wiem, że pewne, rzeczy wydają się być dziwne albo niezrozumiałe, ale nie sposób to wytłumaczyć nie pokazując całego kodu. Pozdrawiam.