Одна из моих функций-членов, которая представляет собой чисто виртуальную пустоту, имеет ошибку LNK 2019

Я работаю над рисованием фигур с помощью строк на C ++. Итак, я написал класс Shapes, который служит базовым классом для двух производных классов: Diamond и Square. Моя виртуальная функция void setStars () в основном хранит координаты точек фигуры, которую я собираюсь распечатать на доске строк. Тем не менее, эта функция связана с проблемой LNK 2019, и я понятия не имею, почему. Это мой код для базового класса.

#ifndef _SHAPE_
#define _SHAPE_

#include <utility>
#include <vector>

class Shape {
protected:
    int x, y, sz;//x-coordinate, y-coordinate, size of Shape


public:
    std::vector<std::pair<int, int>> listOfPoints;
    Shape(int xPos, int yPos, int size) : x(xPos), y(yPos), sz(size) { setStars(); }
    virtual void setStars() = 0;
    void moveBy(int xMove, int yMove) {
        x += xMove;
        y += yMove;
        setStars();
    }
    void setSize(int size) {
        sz = size;
        setStars();
    }
    virtual ~Shape() = default;

};

#endif

Функция setStars () определена в других производных классах. Но я получаю такую ​​ошибку:

unresolved external symbol "public: virtual void __thiscall Shape::setStars(void)" (?setStars@Shape@@UAEXXZ) referenced in function "public: __thiscall Shape::Shape(int,int,int)" (??0Shape@@QAE@HHH@Z)    

Может кто-нибудь объяснить мне, что не так?


person Yang    schedule 25.10.2017    source источник
comment
Вы не можете вызвать виртуальную функцию производного класса в конструкторе базы.   -  person    schedule 26.10.2017
comment
@ manni66 вы имеете в виду в функциях moveBy и setSize? Но я их прокомментировал, и проблема все еще сохраняется   -  person Yang    schedule 26.10.2017
comment
Почему я должен вызывать эти функции конструктором?   -  person    schedule 26.10.2017
comment
@ manni66 Понятно. Извините за недопонимание.   -  person Yang    schedule 26.10.2017