LINUX.ORG.RU

История изменений

Исправление 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(){}

линкер не ругается потому что нечем. Ругается линкер именами, конечно

Линковщик ругается заманглеными именами, потому что только они ему и доступны. Изучите процесс сборки типичной программы.