【发布时间】:2017-01-24 21:27:17
【问题描述】:
我正在使用 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++ 源代码,似乎无法识别相关部分。
注意,上述错误是使用带有-std=c++14的CMake产生的
【问题讨论】:
-
我不知道mysql-connector++,但似乎
sql::Driver是一个抽象类(至少有一个纯虚函数),所以你不能创建它的实例。这对于一般的类都是如此,无论它们的范围如何。 -
显然库创建了派生类的对象,并使用指针向上转换(这是隐式的)将指针存储在
sql::Driver*中。 -
如果程序被编译,变量名
driver__会导致程序有未定义的行为,因为这个名字是为实现保留的。你应该想出另一个变量名。
标签: c++ pointers heap-memory mysql-connector