В ответ на ошибку о vtable: виртуальная команда в этом случае говорит c ++ создать виртуальную таблицу методов в базовом классе. Таким образом, когда вы используете полиморфизм, C ++ может заменить виртуальные методы базового класса методами из производного класса с тем же именем во время выполнения. Эта ошибка говорит пользователю, что эта замена невозможна. Чтобы исправить эту ошибку, вам нужно будет либо реализовать метод, либо установить его как чисто виртуальный, добавив «= 0» в конце определения.
В ответ на изменения: причина, по которой вы не получаете сообщение об ошибке при создании экземпляра объекта в качестве базового класса, заключается в том, что базовому классу не требуется доступ к виртуальной таблице. С другой стороны, если вы на самом деле пытаетесь использовать этот метод, вы должны получить ошибку, так как никакой реализации не существует. Другими словами, даже если вы можете создать экземпляр объекта базового класса, он не является полным классом.