0

Есть трёхфайловый проект, состоящий из файла main.cpp(где создан объект bObj класса B и подключен файл classes.h), файла classes.cpp, в которых прописаны реализации методов классов A и B, файла classes.h, в котором описаны прототипы функций и конструкторов. Линковщик перестаёт ругаться если блок с конструкторами вынести в main.cpp не изменяя их содержание. Как можно переписать конструкторы чтобы не было ругани? В интернете почему-то нету такого примера

Класс A виртуальный, но в нём есть метод который можно вызвать из наследуемого - метод показывает значение поля этого класса Класс B наследник, конструктор класса с аргументами, позволяющий записать в поле базового класса аргумент, переданный при создании объекта

classes.h

class A
{
    protected:
        int a;
    public:
        inline A(void);
        inline A(int aa);
        virtual void print() = 0;
};
class B : public A
{
    private:
        int b;
    public:
        inline B(void);
        inline B(int bb);
        void print();
};

classes.cpp

#include "classes.h"
inline A::A(void)
{
    a = 0;
}
inline A::A(int aa)
{
    a = aa;
}
void A::print()
{
    cout << a << endl;
}
inline B::B(void)
{
    b = 0;
}
inline B::B(int bb)
{
    a = bb;
}
void B::print()
{
    cout << a << endl;
}

main.cpp

#include "classes.h"
B bObj(5);
bObj.print();
  • Решено: inline не должен быть прописан в объявлении конструктора, как я понял - из-за того что компоновщик пытается встроить его сразу в нескольких местах у него это не получается. Следовательноinline B::B(int bb) Превращается в B::B(int bb) в заголовке и самом файле cpp – anrej0705 Sep 16 '23 at 02:21

0 Answers0