2014-01-26 5 views
-1
class MySqlDbFactory: public DbDatabaseFactory{ 
     public: 
      IConnection* CreateConnection(){ 
      return new MySqlDbConnection(); 
      } 

      ICommand* CreateCommand(){ 
      return new MySqlDbCommand(); 
      } 
     }; 

class Factory{ 
      DbDatabaseFactory* _databaseFactory; 
      IConnection* _connection; 
      ICommand* _command; 
    public: 
      Factory(DbDatabaseFactory*); 

     void Start(){ 
      _connection->Connect(); 
      if(_connection->connectionState == true){ 
      _command->Execute("SELECT ..."); 
      } 
     }; 


    }; 

Factory::Factory(DbDatabaseFactory* dbFactory) 
    { 
     _databaseFactory = dbFactory; 
     _connection = dbFactory->CreateConnection(); 
    _command = dbFactory->CreateCommand(); 
    } 


int main(int argc, char *argv[]) 
{ 
    MySqlDbFactory* mySQlFactory = new MySqlDbFactory(); 
    Factory factory = new Factory(mySQlFactory); ... 

У меня есть ошибкаC++: Передача параметров класса указателя в конструкторе

преобразование Factory*' to non-scalar type завода»просил на

Factory factory = new Factory(mySQlFactory); line. 

Есть ли у вас какие-либо предложения?

ответ

1

Это:

Factory* factory = new Factory(mySQlFactory); 

(Обратите внимание на * после Factory)

+0

Код компилируется спасибо, но когда я вызываю метод Start фабричных как factory.Start(); он говорит, что «Старт» не был объявлен. У вас есть предложение об этом? – cagin

+1

Я бы посоветовал вам взять некоторые базовые уроки C++. Ответ: factory-> Start(); это необходимо, потому что фабрика является указателем на объект Factory. – cageman

+0

В этом контексте достаточно написать 'MySqlDbFactory mySqlFactory,' no 'new'. (Тогда вы также можете избавиться от разыменования '->') – erenon

Смежные вопросы