C++: правильный способ инициализации статических полей члена структуры

Я получил это:

// mouse.h
class Mouse {
  private:
    struct Pos {
      static GLfloat x;
      static GLfloat y;
    };    
    static Pos last;
}

и это:

// mouse.cpp
// 1)
Mouse::Pos Mouse::last = {};
// 2)
Mouse::Pos Mouse::last = { 0.0, 0.0 };
// 3)
Mouse::last.x = 0.0f;
Mouse::last.y = 0.0f;

1), 2) а также 3) это попытки, которые я предпринял для инициализации этой вещи. Я понимаю, что заголовок должен объявить, что last является staticи что источник должен его инициализировать, но что-то не так со всеми моими попытками. Может кто-нибудь сказать, пожалуйста, правильный способ сделать такую ​​вещь? Я упускаю какой-то очень важный момент? Это чепуха? Важно, чтобы поля были статическими. Благодарю.

2 ответа

Решение

Вам не нужно объявлять содержимое Pos как статическое.

// mouse.h

class Mouse {
  private:
    struct Pos {
      GLfloat x;
      GLfloat y;
    };    
    static Pos last;
}

Mouse::Pos Mouse::last = { 0.0, 0.0 };

Это должно работать тоже

Важно, чтобы поля были статическими.

затем last не будет никакого государства. Это будет просто относиться к статическому x а также y значения внутри Mouse::Pos,

#include "mouse.h"

GLfloat Mouse::Pos::x = 10;
GLfloat Mouse::Pos::y = 10;

Mouse::Pos Mouse::last{};

пример wandbox


Следующие утверждения проходят:

assert(Mouse::last.x == 10);
assert(Mouse::last.y == 10);
Другие вопросы по тегам