неопределенная ссылка на, но она определена - PullRequest
0 голосов
/ 19 марта 2011

У меня есть класс А с виртуальными встроенными геттерами и сеттерами.Из A есть два класса B и C.И у меня есть класс D, производный от B и C. Создание объекта из D и использование getName () приводит к «неопределенной ссылке на getName ()».Удаление «встроенного» не работает.Заголовочный файл включен правильно.В чем здесь проблема?

class A
{
    public:
        virtual inline std::string getName() const{return name;}

    protected:
        std::string name;
};

class B : public virtual A {};
class C : public virtual A {};

class D : public B, public C {};

1 Ответ

2 голосов
/ 19 марта 2011

Ваш код прекрасно компилируется с / без inline: со встроенным и без встроенного

Но помните об этом иначе: при виртуальном наследовании выдля явной инициализации базы, ЕСЛИ конструктор базового класса принимает параметр как,

class D : public B, public C 
{
   public:
      D(string s) : A(s), B(s), C(s){}
                  //^^^^ note this!

};

Только D(string s) : B(s), C(s) будет недостаточно: http://ideone.com/MPUPj

A(s) равно также необходимо: http://ideone.com/DNLkA

Подробнее см. В этом разделе: о виртуальном базовом классе и виртуальном наследовании в C ++

...