Witam.
Od jakiegoś już czasu trenuję programowanie w c++. Wymyśliłem sobie programik (do obsługi bazy MySQL z wykorzystaniem biblioteki mysql++) i próbuję go zrealizować.
Dzisiaj stworzyłem sobie klasę ze zmienną statyczną oraz funkcją statyczną, która na niej będzie wykonywać pewne operacje. (to umieściłem w pliku nagłówkowym). W pliku *.cpp umieściłem definicję funkcji oraz tej zmiennej statycznej z przypisaniem jej odpowiedniej wartości. A całość skompilowałem (oczywiście po podlinkowaniu odpowiednich bibliotek do mysql'a)
A oto pliki tej mojej pseudo biblioteki którą właśnie skompilowałem:
Plik nagłówka DataBase.h
#include <mysql++.h>
class wxConfigure;
class DataBase
{
static mysqlpp::Connection MYSQL_Obj;
wxConfigure * Config;
public:
DataBase(){};
~DataBase(){};
// Połączenie z MySQL
static int Connect();
};
Plik DataBase.cpp
mysqlpp::Connection DataBase::MYSQL_Obj(false);
int DataBase::Connect()
{
}
No i wygląda na to że wszystko jest ok ale niestety...
Postanowiłem podlinkować tą moją bibliotekę do innego projektu napisanego przy użyciu wxWidgets. Dodałem więc tam plik nagłówkowy, linkerowi dałem namiary na potrzebne pliki z bibliotekami, strorzylem w końcu zmienną globalną mojego własnego typu "DataBase".
I jakie było moje zdziwienie kiedy to program wykrzaczył się (zwracał SIGSEGV) w momencie zamykania programu. Spróbowałem jeszcze raz go odpalić tym razem uruchamiając dla tego obiektu funkcję DataBase::Connect(); i o dziwo wtedy program wyłącza się normalnie. Próbowałem jeszcze wiele razy i za każdym razem było tak samo. Gdy obiekt database tylko sobie zdefiniowałem i nic na nim nie robiłem to przy wyłączaniu programu zawsze się wykrzacza, gdy uruchomię funkcję to wtedy nie. Bez tej nieszczęsnej definicji program działa normalnie (zresztą nie ma tam nie wiadomo jakich udziwnień... czysty projekt uruchamiający okienko aplikacji i nic poza tym).
Czy ktoś wie co może być przyczyną? Ew. jak zrobić by się dowiedzieć?
A i jeszcze drugie pytanie. Czy kolejność dyrektyw "include" ma znaczenie? :P
Jeśli piszę:
#include <wx/string.h>
#include <mysql++.h>
to ta moja biblioteczka kompiluje się normalnie a jeśli:
#include <mysql++.h>
#include <wx/string.h>
to kompilator zwraca błąd że nie można zamienić TCHAR* na WCHAR*
Z góry dzięki za wszystkie odpowiedzi. Pozdrawiam.