0

Есть такой класс в файле offers.h:

class Offers {
public:
static void Main ();
static Window *window;
};

void Offers::Main () { Offers::window = new Window(GTK_WINDOW_TOPLEVEL, "WAMS v0.0.2 [Управление товарами]", "icons/logo/logo-128x128.png",800,500,15,true); Offers::window->Show(); }

Сразу говорю тип Window это класс для удобной работы с окнами. В функции int main () вызывается void OffersMain (*) которая находится в отдельном cpp файле. Содержимое файла offers.cpp:

#include "main.h"
#include "offers.h"

Offers m;

void OffersMain (GtkWidget *w, gpointer g) { m.Main(); }

При компиляции получаю такой ответ:

/usr/bin/ld: /tmp/ccQvYDwC.o: в функции «Offers::Main()»:
offers.cpp:(.text+0xa5): неопределённая ссылка на «Offers::window»
/usr/bin/ld: offers.cpp:(.text+0xdc): неопределённая ссылка на «Offers::window»
collect2: error: ld returned 1 exit status

Что я делаю не так?!?

MARSHAL
  • 118

1 Answers1

5

Самый лучший вариант решения - использовать C++17, там добавили одну долгожданную возможность. А именно:

static inline Window *window = nullptr;

Ну а если стандарт ниже 17 - то:

class Offers {
public:
static void Main ();
static Window *window;
};
Window* Offers::window = nullptr;
Lofectr
  • 1,128