나는 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'는 추상 클래스 (적어도 하나의 순수 가상 함수가 있음) 인 것처럼 보이므로 인스턴스를 생성 할 수 없습니다. 범위에 관계없이 일반적으로 클래스에 적용됩니다. –
분명히 라이브러리는 파생 클래스의 객체를 만들고, 암시 적으로 포인터 업 캐스팅을 사용하여 포인터를'sql :: Driver * '에 저장합니다. –
프로그램이 컴파일 된 경우, 변수 이름'driver__'는 프로그램에 정의되지 않은 동작을 발생시킵니다. 그 이름은 구현에 예약되어 있기 때문입니다. 다른 변수 이름을 찾아야합니다. – user2079303