Я хочу создать класс 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;
}
Дубликат: http://stackoverflow.com/questions/185844/initializing-private-static-members?rq=1 (взято из списка справа, серьезно!) –
Вы можете удалить элементы данных и сделать их локальными статическими переменными внутри 'getConnection()'. – juanchopanza
@AlecTeal это дубликат? не потому, что ответ в указанном вами потоке неприменим, поскольку инициализация частного статического члена вне класса невозможна! – tuxmania