структура не наследует виртуальную функцию - PullRequest
0 голосов
/ 20 мая 2018

У меня есть две структуры, которые наследуются друг от друга, и родительская структура, которая не имеет отношения к этим структурам, но управляет std::vector указателями для основного класса.Вот некоторый код.

Определение родительского класса:

struct Widget {
    virtual void inflate();
}

Определение дочернего класса:

struct Label : public Widget {
    void inflate();
}

Реализации функций:

void Label::inflate(){
    std::cout << "Child function called" << std::endl;
}

void Widget::inflate(){
    std::cout << "Parent function called" << std::endl;
}

Использование:

std::vector<Widget*> widgets = std::vector<Widget*>();
Label1 = Label();
Label2 = Label();
widgets.push_back(Label1);
widgets.push_back(Label2);
int i = 0;
while(i < widgets.size()){
    widgets[i]->inflate();
    i++;
}

Вывод:

Parent function called
Parent function called

Спасибо

1 Ответ

0 голосов
/ 20 мая 2018

Проблема в вашем коде использования, как уже сказано в комментариях.Я изменил его так, чтобы он компилировался и работал так, как ожидалось.Я не могу сказать вам точную проблему с вашим исходным кодом, хотя он не компилируется.

Вот рабочий код:

#include <iostream>
#include <vector>

struct Widget {
    virtual void inflate();
};

struct Label : public Widget {
    void inflate();
};

void Label::inflate(){
    std::cout << "Child function called" << std::endl;
}

void Widget::inflate(){
    std::cout << "Parent function called" << std::endl;
}

int main()
{
    std::vector<Widget*> widgets = std::vector<Widget*>();
    Label Label1;
    Label Label2;
    widgets.push_back(&Label1);
    widgets.push_back(&Label2);
    int i = 0;
    while(i < widgets.size()){
        widgets[i]->inflate();
        i++;
    }
}

Ссылка, чтобы увидеть, как он работает: https://ideone.com/ETDClF

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...