Inicjalizacja statycznych składowych klasy

0

Zadeklarowałem w pliku nagłówkowym i próbuję zainicjalizować w kodzie źródłowym w pliku cpp, ale ciągle coś mi nie działa.

QSqlDatabase Database::Conn = null;

  • Nie można dokonać konwersji int na QSqlDatabase
    QSqlDatabase Database::Conn = new QSqlDatabase;
  • Nie można dokonać konwersji QSqlDatabase* na QSqlDatabase

Podejrzewam że w drugim przypadku do zmiennej Conn próbuję przypisać wskaźnik a nie normalną instancję klasy :x (?), co jest o tyle dziwne że przypisuję tylko w momencie wykonania QSqlDatabase::addDatabase() która nie zwraca wskaźnika...

Jeśli zadeklaruję Conn jako wskaźnik
QSqlDatabase Database::*Conn = null;

  • to mimo przypisywania do tej zmiennej :
    QSqlDatabase Database::*Conn =& QSqlDatabase::addDatabase();
  • co przechodzi, to ciągle coś się chrzani

Jak to zrobić dobrze?

0

QSqlDatabase *Database::Conn = &QSqlDatabase::addDatabase();

2

QSqlDatabase to klasa i ma konstruktor. Wywołaj go i już, po co Ci to =?

QSqlDatabase Database::Conn; to wszystko.

Jeżeli chcesz użyć addDatabase() to wskaźniki nie są potrzebne, po prostu przypisz w inicjalizacji to co zwraca ta funkcja: QSqlDatabase Database::Conn = QSqlDatabase::addDatabase("costam", "ewentualnie costam");.

1
orglee napisał(a):

Jeśli zadeklaruję Conn jako wskaźnik
QSqlDatabase Database::*Conn = null;

  • to mimo przypisywania do tej zmiennej :
    QSqlDatabase Database::*Conn =& QSqlDatabase::addDatabase();
  • co przechodzi, to ciągle coś się chrzani

Chrzani się bo addDatabase zwraca QSqlDatabase przez wartość, która jest traktowana jako obiekt automatyczny (zaraz po wykonaniu tej linijki obiekt jest usuwany), więc potem masz wskaźnik do usuniętego obiektu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1