Вы должны простить меня, если это действительно простой вопрос;Я долгое время не использовал С ++ так много, поэтому я забыл, как много это работает.
В любом случае, у меня есть базовый класс и пара производных классов, как это (супер упрощенно, носуть та же):
class Base
{
public:
Base () { }
int SomeFunction (int x, int y); // abstract definition
};
class Derived1 : public Base
{
public:
Derived1() : Base() { }
int SomeFunction (int x, int y)
{
// actual implementation
return 4;
}
};
class Derived2 : public Base
{
public:
Derived2() : Base() { }
int SomeFunction (int x, int y)
{
// actual implementation
return 7;
}
};
Позже в main
У меня есть список Base
объектов:
Base *baseobjects[10];
Позже я заполняю этот массив экземплярами Derived1
и Derived2
.Это работает с baseobjects[i] = &newDerived1
(где newDerived1
является экземпляром класса Derived1
).Все в порядке.
То, что я не могу понять, это то, как позже выполнить итерацию в массиве baseobjects
и вызывать SomeFunction
для каждого экземпляра в списке , не зная явно, какой производный классЯ использую .Я сделал это в C #, и он работает нормально, но, очевидно, мой синтаксис C ++ выключен:
int result = baseobjects[i]->SomeFunction(a, b);
Это дает мне ошибку LNK2019
при попытке компиляции, очевидно, потому что он смотрит на Base
класс для реализации и его там нет.Я предполагаю, что мне нужно использовать некоторые приемы указателя, чтобы заставить его взглянуть на правильный производный метод, но ничего из того, что я пробовал, пока не сработало.Есть предложения?