私は、MySQL-conntectorを使用してい++と私のようなポインタ型の行動のいくつかによって興味:sql
のクラスをネストされているネストされたクラスポインタの特殊な動作?
sql::Driver *driver__;
または
sql::Connection *connection__;
明らかに::Driver
と::Connection
、私はヒープ上のこれらのポインタのいずれかを初期化しようとするとき:
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上記のエラーは、基本クラスのサブオブジェクトとして存在する抽象クラスの-std=c++14
私はmysql-connector ++を知らないが、 'sql :: Driver'は抽象クラス(少なくとも1つの純粋仮想関数を持つ)であるため、そのインスタンスを作成することはできません。これは、スコープに関係なく、一般的なクラスの場合に当てはまります。 –
明らかに、ライブラリは派生クラスのオブジェクトを作成し、 '暗黙的に 'ポインタのアップキャストを使用して' sql :: Driver * 'にポインタを格納します。 –
プログラムがコンパイルされた場合、変数名 'driver__'は、その名前が実装に予約されているため、プログラムに未定義の動作をさせます。別の変数名が必要です。 – user2079303