Проблемы с абстрактным классом C ++ (я могу сделать это на Java, но не на C ++!)

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

Я пытаюсь сделать так, чтобы конструктор абстрактного класса вызывал чисто виртуальную функцию. В 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();
    }
}

Этот код печатает «Ура!». Любая помощь очень ценится!

5
задан Kara 28 June 2013 в 23:54
поделиться