首先,我搜索了这个问题,发现了很多类似的问题,但我找不到解决我问题的答案。如果这只是我的愚蠢,我很抱歉。
我想做的是让抽象类的构造函数调用一个纯虚函数。在 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();
}
}
此代码打印“是的!”。非常感谢任何帮助!