История изменений
Исправление Siborgium, (текущая версия) :
компилятор не ругается потому что не его дело
А что, его?
Вот, например, такой код. При (раздельной) компиляции каждого объектника одна из реализаций будет недоступна компилятору, тот же случай, что и у ТС. Тем не менее, если линковщику предоставить объектник, в котором реализация есть, программа успешно соберется. За вычетом мелочей типа инстанса B b
это ровно тот случай, что у ТС.
// decls.hxx
class A
{
public:
int data;
virtual void method();
virtual ~A(){}
};
class B : public A
{
public:
virtual void method();
};
// object1.cxx
#include "decls.hxx"
void A::method(){}
// object2.cxx
#include "decls.hxx"
void B::method(){}
линкер не ругается потому что нечем. Ругается линкер именами, конечно
Линковщик ругается заманглеными именами, потому что только они ему и доступны. Изучите процесс сборки типичной программы.
Исправление Siborgium, :
компилятор не ругается потому что не его дело
А что, его?
Вот, например, такой код. При (раздельной) компиляции каждого объектника одна из реализаций будет недоступна, тот же случай, что и у ТС. Тем не менее, если линковщику предоставить объектник, в котором реализация есть, программа успешно соберется. За вычетом мелочей типа инстанса B b
это ровно тот случай, что у ТС.
// decls.hxx
class A
{
public:
int data;
virtual void method();
virtual ~A(){}
};
class B : public A
{
public:
virtual void method();
};
// object1.cxx
#include "decls.hxx"
void A::method(){}
// object2.cxx
#include "decls.hxx"
void B::method(){}
линкер не ругается потому что нечем. Ругается линкер именами, конечно
Линковщик ругается заманглеными именами, потому что только они ему и доступны. Изучите процесс сборки типичной программы.
Исходная версия Siborgium, :
компилятор не ругается потому что не его дело
А что, его?
Вот, например, такой код. При компиляции каждого объектника одна из реализаций будет недоступна, тот же случай, что и у ТС. Тем не менее, если линковщику предоставить объектник, в котором реализация есть, программа успешно соберется. За вычетом мелочей типа инстанса B b
это ровно тот случай, что у ТС.
// decls.hxx
class A
{
public:
int data;
virtual void method();
virtual ~A(){}
};
class B : public A
{
public:
virtual void method();
};
// object1.cxx
#include "decls.hxx"
void A::method(){}
// object2.cxx
#include "decls.hxx"
void B::method(){}
линкер не ругается потому что нечем. Ругается линкер именами, конечно
Линковщик ругается заманглеными именами, потому что только они ему и доступны. Изучите процесс сборки типичной программы.