Ошибка dlopen синглтон-класса для статической функции (невозможно воспроизвести в примере кода)! - PullRequest
0 голосов
/ 16 октября 2018

Я не могу перефразировать проблему, которую я имею в своем целевом приложении, в какой-то красивой и компактной форме для отображения, но я записал определение класса, которое я использую для mysingleton, что вызывает у меня горе, и я надеюсь, что кто-томожет быть в состоянии направить меня к решению.Хорошо, проблема в том, что мое приложение возвращает ошибку времени выполнения, которая выглядит следующим образом: Error opening requested library (/path/to/./libcloudparc.sys.db_connector.so) dlopen() error: /path/to/./libcloudparc.sys.db_connector.so: undefined symbol: _ZN7db_pool8instance, где db_pool - это мой одноэлементный класс, который выглядит следующим образом:

class someclA {
    public:
    someclA(int,int,int){}
    ~someclA(){}
};
class db_pool : public someclA {
    private:
    static db_pool *inst;
    db_pool(int &A,
              int &B,
              int &C): someclA(A,B,C){}
   public:
   static db_pool *getInstance(int &a,
                                 int &b,
                                 int &c) {
          if(!inst) {
             inst = new db_pool(a,b,c);

             inst->init(a,b,c);
            }
         return inst;
        }
        int init (int ,int,int);
};

int main (void) {
    int A=11;
    int B=22;
    int C=33;
    db_pool *inst = inst->getInstance(A,B,C);   
}

Почему я получаю ошибку, как упоминалось?Кто-нибудь может помочь мне продвинуться здесь?

1 Ответ

0 голосов
/ 16 октября 2018

Если переменная в классе static, она будет принадлежать всем экземплярам этого класса, а не только одному экземпляру.Так что это должно быть определено в первую очередь.И вы можете иметь только одно определение этой переменной.Поэтому он должен быть помещен в исходный (не заголовочный) файл за пределами объявления класса.Вам нужно сделать что-то вроде этого:

db_pool * db_pool::inst = nullptr; //for a start
...