Ĺadny brzuch
Hej mam takie klasy i próbuje usunąć wieloznaczność jednak nie chce wyjść, choć
wydaje się że robię dobrze:
class samochod { public: int x; }; class lodka { public: int x; }; class amfibia: public samochod, lodka { public: int amfibia::x() { return samochod::x; } };
Wywala kompilator błąd przy int amfibia::x()
"[C++ Error] Unit1.cpp(24): E2014 Member is ambiguous: 'samochod::x' and 'lodka::x'" ?
Tak ogólnie to bez -pedantic się powinno skompilować, ale jeśli chcesz usunąć ten błąd to możesz wprowadzić jakąś wirtualną klasę bazową, z której będą dziedziczyły zarówno łódka jak i samochód.
Czyli na przykład tak:
class Transport { Â public: Â Â int x; }; class Lodka : virtual public Transport { // ... }; class Samochod : virtual public Transport { // ... }; class Amfibia : public Lodka, public Samochod { // ... };
Użytkownik Chmurek edytował ten post 31 marzec 2006, 21:32
taka rada na przyszłość: warto czasem używać trochę dłuższych nazw, przy małych programach nie ma to wielkiego znaczenia, ale gdy czyta się dłuższy kod i trzeba rozkodowywać zmienne typu x1, x2, x3..... o ile ławiej byłoby zastosować np "rozmiar", "szybkosc" itp :)
Sądzę, że po prostu podał taki przykład z x. ;)
Robi to specjalnie; to jest przykład z Symfonii.
A błąd to tu raczej jest w związku z funkcją - bo kto to widział, żeby funkcja i zmienna się tak samo nazywała? :)
//nie kompilowałem tego i nie sprawdzałem, więc na 100% pewny nie jestem
Po komunikacie błędu, który zacytował autor tematu raczej widać, że to nie z powodu takiej samej nazwy metody jak nazwa składowej. ;)
Użytkownik Chmurek edytował ten post 31 marzec 2006, 21:32
blad nie jest zwiazany z kodem ktory gosc wkleil.
class samochod { public: int x; }; class lodka { public: int x; }; class amfibia: public samochod, lodka { public: int x() { return samochod::x; } }; int main() { return 0; } kompiluje sie poprawnie bo jest poprawne (po korekcie - metoda x) - zarowno z pedantic jak i Wall, ansi.
na 100% blad jest przy wywolywaniu funkcji/zmiennej x, ale ofkoz nie raczyl podac reszty :P
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
wydaje się że robię dobrze:
class samochod { public: int x; }; class lodka { public: int x; }; class amfibia: public samochod, lodka { public: int amfibia::x() { return samochod::x; } };
Wywala kompilator błąd przy int amfibia::x()
"[C++ Error] Unit1.cpp(24): E2014 Member is ambiguous: 'samochod::x' and 'lodka::x'" ?
Tak ogólnie to bez -pedantic się powinno skompilować, ale jeśli chcesz usunąć ten błąd to możesz wprowadzić jakąś wirtualną klasę bazową, z której będą dziedziczyły zarówno łódka jak i samochód.
Czyli na przykład tak:
class Transport { Â public: Â Â int x; }; class Lodka : virtual public Transport { // ... }; class Samochod : virtual public Transport { // ... }; class Amfibia : public Lodka, public Samochod { // ... };
Użytkownik Chmurek edytował ten post 31 marzec 2006, 21:32
taka rada na przyszłość: warto czasem używać trochę dłuższych nazw, przy małych programach nie ma to wielkiego znaczenia, ale gdy czyta się dłuższy kod i trzeba rozkodowywać zmienne typu x1, x2, x3..... o ile ławiej byłoby zastosować np "rozmiar", "szybkosc" itp :)
Sądzę, że po prostu podał taki przykład z x. ;)
Robi to specjalnie; to jest przykład z Symfonii.
A błąd to tu raczej jest w związku z funkcją - bo kto to widział, żeby funkcja i zmienna się tak samo nazywała? :)
//nie kompilowałem tego i nie sprawdzałem, więc na 100% pewny nie jestem
Po komunikacie błędu, który zacytował autor tematu raczej widać, że to nie z powodu takiej samej nazwy metody jak nazwa składowej. ;)
Użytkownik Chmurek edytował ten post 31 marzec 2006, 21:32
blad nie jest zwiazany z kodem ktory gosc wkleil.
class samochod { public: int x; }; class lodka { public: int x; }; class amfibia: public samochod, lodka { public: int x() { return samochod::x; } }; int main() { return 0; } kompiluje sie poprawnie bo jest poprawne (po korekcie - metoda x) - zarowno z pedantic jak i Wall, ansi.
na 100% blad jest przy wywolywaniu funkcji/zmiennej x, ale ofkoz nie raczyl podac reszty :P