wielokrotne dziedziczenia, niewidoczny konstruktor domyślny

0

witam.

Mam problem z wielokrotnym dziedziczeniem, mianowicie kompilator nie widzi mi domyślnego konstruktora drugiej klasy z której dziedziczę (base2):

plik pierwszy (którego nie mogę zmienić):

 
class Base1
{
   public:
      Base1(int a, int b)
      {
      };
};

plik drugi (którego także nie mogę zmienić):

 
class Base2
{
   public:
      Base2();
};

plik trzeci (przy którym mogę grzebać):

 
#include Base1.hh
#include Base2.hh

class derived : public Base1, public Base2
{
   public:
      derived(int a, int b) : Base1(a, b) {}; //tutaj wyrzuca undefined reference to Base2::Base2()
};

Proszę o pomoc i sugestie, ponieważ samego wielokrotnego dziedziczenia chyba nie mogę za bardzo ruszyć.

1

To jest cały kod? Bo Base2::Base2() to tylko deklaracja - nie ma definicji i linker pokaże właśnie taki błąd.

Średnik po klamrze w zamykającej ciało funkcji jest niepotrzebny, a przed C++11 jest wręcz błędem.

0
Endrju napisał(a):

To jest cały kod? Bo Base2::Base2() to tylko deklaracja - nie ma definicji i linker pokaże właśnie taki błąd.

Średnik po klamrze w zamykającej ciało funkcji jest niepotrzebny, a przed C++11 jest wręcz błędem.

w Base2.cc jest definicja, stąd właśnie mój problem, jest tak jakby kompilator jej nie widział.

Base2() {
initData();
}
 

Ze średnikami racja, z rozpędu je wklepałem "szkicując sytuację".

1

Base2::Base2() {
// blablabla
}

  • uprzedze Twoje nastepne pytanie:
  • dodaj wszystkie pliki do projektu.
0
__tmp napisał(a):

Base2::Base2() {
// blablabla
}

  • uprzedze Twoje nastepne pytanie:
  • dodaj wszystkie pliki do projektu.

Wydaje mi się że Eclipse "widzi" zarówno deklarację i definicję Base2 (w innej klasie gdzie tak dziedziczę kompilator nie zgłasza zastrzeżeń),
sprawdzę też dokładniej kwestię obecności tego operatora zasięgu jutro, ale dzięki za sugestię.

Zasadniczo błędy wypluwane są tylko przy wywołaniu konstruktora klasy która dziedziczy z tej klasy.

0

Kod sam w sobie jest ok, coś się źle kompiluje/linkuje: http://ideone.com/zkU9ty
Jak wygląda wyjście z konsoli podczas budowania? (Okienko jest na dole)

Edit: Jak słusznie zauważył @n0name_l w Base2.cc ma być Base2::Base2() { ... - to jest definicja konstruktora. W zasadzie @__tmp też to napisał wyżej, tylko ja nie zauważyłem, że to co napisałeś było błędne.

0
Endrju napisał(a):

Kod sam w sobie jest ok, coś się źle kompiluje/linkuje: http://ideone.com/zkU9ty
Jak wygląda wyjście z konsoli podczas budowania? (Okienko jest na dole)

Edit: Jak słusznie zauważył @n0name_l w Base2.cc ma być Base2::Base2() { ... - to jest definicja konstruktora. W zasadzie @__tmp też to napisał wyżej, tylko ja nie zauważyłem, że to co napisałeś było błędne.

Głupia sprawa Panowie, nie linkowało mi Base2- podkompilowałem, zalinkowałem i działa.
Dzięki za pomoc i sorry za zamieszanie z głupim problemem, jednak sprawdziłem to jako ostatnie.

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