親クラスに子クラスのインスタンスを作成する問題があります。私は 'MySQLdbは'C++ singleton親クラスの子を作成する
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.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.hppにはdb.hppが含まれています。これにはdb.hpが含まれています。 – Garf365
基本クラスは子クラスについて知る必要があります1つを作る。子クラスは構築時に基本クラスを作成する必要があります。それはシングルトンを除いて、そうすることはできません。だから、子供もシングルトンにする必要があります。そしてあなたはそれらのうちの1つだけを作ります。私はこれを解決することができた。しかし、私はむしろそうではありません。基底クラスがシングルトンである(明らかな)理由はありません。あなたがただ一つだけを望むならば、ただ一つ作ってください。一般的に、シングルトンを基本クラスとして使用することはできません。 – doctorlove
db.hppの宣言だけでなく、ファイル全体を実際に含める必要がありますか? – YiFei