2014-01-10 6 views
0

Я хочу создать класс Connector, который содержит ровно один sql :: Указатель соединения. Моя попытка состояла в том, чтобы создать класс Singleton и сделать сам указатель и конструктор частным. только статическая функция является общедоступной, что позволяет создавать соединение.инициализировать приватную статическую переменную C++

Моя попытка использовать

Connector::conn = 0; 

в модуле реализации не удалось, так как свя является приватным и не снаружи, доступную.

Если я ommit initiliziation я получаю ошибку неопределенной ссылки

Connector.h

#ifndef CONNECTOR_H 
#define CONNECTOR_H 

#include <cppconn/driver.h> 
#include <cppconn/exception.h> 

class Connector { 

public: 
    static sql::Connection* getConnection(); 


protected: 
    Connector(); 
    Connector(const Connector& other) { } 

    static sql::Connection * conn; 
    static sql::Driver * drive; 
}; 

#endif /* CONNECTOR_H */ 

Connector.cpp

#include "Connector.h" 

Connector::Connector() { 
} 

sql::Connection * Connector::getConnection() { 
    if(Connector::conn == 0) { 
     Connector::drive = get_driver_instance(); 
     Connector::conn = Connector::drive->connect("tcp://any.de:3306", "any", "any"); 
     Connector::conn->setSchema("cryptoTool"); 
    } 
    return Connector::conn; 
} 
+1

Дубликат: http://stackoverflow.com/questions/185844/initializing-private-static-members?rq=1 (взято из списка справа, серьезно!) –

+0

Вы можете удалить элементы данных и сделать их локальными статическими переменными внутри 'getConnection()'. – juanchopanza

+0

@AlecTeal это дубликат? не потому, что ответ в указанном вами потоке неприменим, поскольку инициализация частного статического члена вне класса невозможна! – tuxmania

ответ

5

Вместо

Connector::conn = 0; 

записи

sql::Connection * Connector::conn = 0; 
+0

Это ответ, который я искал, и он не упоминается в http://stackoverflow.com/questions/185844/initializing-private-static-members?rq=1, поэтому мне все равно, если это дублированный вопрос , потому что это, конечно, не дублирующий ответ. – tuxmania

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