Прежде всего, я искал эту проблему и нашел много похожих вопросов, но не смог найти ответа, который бы устранил мою проблему. Мне очень жаль, если я просто веду себя глупо.
Я пытаюсь сделать так, чтобы конструктор абстрактного класса вызывал чисто виртуальную функцию. В Java это работает, потому что подкласс обеспечивает реализацию вызываемого абстрактного метода. Однако в C ++ я получаю эту ошибку компоновщика:
test.o:test.cpp:(.text$_ZN15MyAbstractClassC2Ev[MyAbstractClass::MyAbstractClass
()]+0x16): undefined reference to `MyAbstractClass::initialize()'
collect2: ld returned 1 exit status
Вот мой код:
#include <iostream>
class MyAbstractClass {
protected:
virtual void initialize() = 0;
public:
MyAbstractClass() {
initialize();
}
};
class MyClass : public MyAbstractClass {
private:
void initialize() {
std::cout << "yey!" << std::endl;
}
};
int main() {
MyClass *my = new MyClass();
return 0;
}
В качестве дополнительного объяснения того, что я пытаюсь сделать, вот код на Java, который достигает моей цели:
public abstract class MyAbstractClass {
public MyAbstractClass() {
initialize();
}
protected abstract void initialize();
}
public class MyClass extends MyAbstractClass {
protected void initialize() {
System.out.println("Yey!");
}
public static void main(String[] args) {
MyClass myClass = new MyClass();
}
}
Этот код печатает «Ура!». Любая помощь очень ценится!