부모 클래스에 자식 클래스의 인스턴스를 만드는 데 문제가 있습니다. 여기C++ singleton 부모 클래스에 자식 만들기
아이 싱글 (부모 클래스) 여기
db.hpp
-------
#ifndef DB_HPP
#define DB_HPP
#include <string>
#include "mysqldb.hpp"
class Db
{
public:
static Db& instance()
{
// can be added other database implementations
#ifdef DBMYSQL
static Db *instance = new MySQLDb();
#elseif DBORACLE
//static Db *instance = new OracleDb();
#endif
return *instance;
}
virtual ~Db() {}
virtual void Insert(std::string& query) = 0;
protected:
Db() {}
};
#endif // DB_HPP
과 정의입니다
mysqldb.hpp
-----------
#ifndef MYSQLDB_HPP
#define MYSQLDB_HPP
#include "db.hpp"
#include <mysql.h>
class MySQLDb : public Db
{
public:
virtual void Insert(std::string& query);
private:
MYSQL *MySQLConnection_;
MySQLDb();
~MySQLDb();
};
#endif // MYSQLDB_HPP
내가 가지고 오류 기대 형식 지정자 'MySQLDb'
g++ -DDBMYSQL `mysql_config --cflags` `mysql_config --libs` -DBOOST_LOG_DYN_LINK -std=c++11 -c -o mysqldb.o mysqldb.cpp
In file included from mysqldb.hpp:4:0,
from mysqldb.cpp:1:
db.hpp: In static member function ‘static Db& Db::instance()’:
db.hpp:16:35: error: expected type-specifier before ‘MySQLDb’
static Db *instance = new MySQLDb();
^
Makefile:39: recipe for target 'mysqldb.o' failed
전 뭐가 잘못 됐는지 알아? Db
이 MySQLDb
에 따라 영원히 등 Db
에 따라 달라집니다 : 모든
순환 의존성이 있습니다. mysqldb.hpp에는 db.hpp가 포함되어 있습니다. 여기에는 db.hp가 포함되어 있습니다. – Garf365
기본 클래스는 하위 클래스에 대해 알아야합니다. 어떤 것을 만들어. 자식 클래스는 생성 될 때 기본 클래스를 만들어야합니다. 그것은 싱글 톤을 제외하고는 불가능합니다. 그래서 아이도 싱글 톤이되어야합니다. 그리고 그 중 하나만 만듭니다. 나는 이것을 풀 수 있었다. 그러나 나는 차라리하지 않을 것입니다 : 기본 클래스가 싱글 톤이되는 (분명한) 이유가 없습니다. 네가 원하면 그냥 만들어라. 일반적으로 싱글 톤을 기본 클래스로 사용할 수 없습니다. – doctorlove
db.hpp의 선언이 아닌 전체 파일을 포함해야합니까? – YiFei