2014-08-27 6 views
1

Я хочу иметь статический указатель на структуру sqlite3, поэтому я мог бы сразу открыть соединение с БД, выполнить некоторые запросы во время выполнения и закрыть соединение с БД на выходе программы.Как определить статический указатель на sqlite3 struct? C++

(я связан sqlite3 статическую LIB, DLL)

так в моем классе заголовок:

foo.h:

#include "sqlite/sqlite3.h" 

class foo 
{ 
    public: 
     static sqlite3 *db; 
     static void connect(); 
} 

foo.cpp:

#include "foo.h" 

sqlite3 foo::*db = nullptr; 

foo::connect(){ 

    //sqlite3 *db; //<-this works 
    char *zErrMsg = 0; 
    int rc; 

    rc = sqlite3_open("test.db", &db); 

    if(rc){ 
     fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); 
     exit(0); 
    }else{ 
     fprintf(stderr, "Opened database successfully\n"); 
    } 
    //sqlite3_close(db); // close connection when program is exiting. Not here. 

} 

I ge т эта ошибка: LNK2001: неразрешенный внешний символ «публичный статический структура sqlite3 * Foo :: дб» ....

ответ

6

У вас есть указатель на sqlite3, поэтому синтаксис право определение было бы

sqlite3* foo::db = nullptr; 

или просто

sqlite3* foo::db; 

Обратите внимание, что вы должны сделать это указывает на допустимый sqlite3 объекта, прежде чем де-ссылаться на него.

+0

это работает, спасибо :) –