Я использую MySQL-conntector ++, и я заинтересован некоторыми из поведения типов указателей, таких как:Сложное поведение вложенных указателей класса?
sql::Driver *driver__;
или
sql::Connection *connection__;
Очевидно ::Driver
и ::Connection
вложенные классы sql
, когда я пытаюсь инициализировать любой из этих указателей в куче:
sql::Driver *driver__ {new sql::Driver()};
Ошибка:
error: invalid new-expression of abstract class type ‘sql::Driver’
sql::Driver *driver__ {new sql::Driver()};
Как библиотеки реализуют этот тип поведения с вложенными классами и указателями на такие классы?
Я просмотрел исходный код mysql-connector ++ и, похоже, не могу определить соответствующий раздел.
N.B вышеуказанные ошибки были получены с использованием CMake с -std=c++14
Я понятия не имею о mysql-connector ++, но кажется, что 'sql :: Driver' является абстрактным классом (имеет хотя бы одну чистую виртуальную функцию), поэтому вы не можете создавать экземпляры его. Это справедливо для классов в целом, независимо от их объема. –
Очевидно, библиотека создает объекты производных классов и использует указатель upcast (который неявный) для хранения указателя в 'sql :: Driver *'. –
Если программа скомпилирована, имя переменной 'driver__' приведет к тому, что программа будет иметь неопределенное поведение, потому что это имя зарезервировано для реализации. Вы должны придумать другое имя переменной. – user2079303