C++ 类可以将自身用作静态类型吗?

C++ 类可以将自身用作静态类型吗?,c++,visual-c++,C++,Visual C++,以下代码在使用Visual Studio 2013编译时生成链接器错误 #define MAX_CONTROLLERS 4 class JoypadController { public: JoypadController() : m_is_connected(false), m_gamepad(0), m_instance_id(-1), m_haptic(0) {} int JoypadController::processEvent(const SDL_Event&am

以下代码在使用Visual Studio 2013编译时生成链接器错误

#define MAX_CONTROLLERS 4

class JoypadController {
public:
    JoypadController() : m_is_connected(false), m_gamepad(0), m_instance_id(-1), m_haptic(0) {}

    int JoypadController::processEvent(const SDL_Event& event);
private:
    SDL_GameController *m_gamepad;
    SDL_Haptic *m_haptic;
    SDL_JoystickID m_instance_id;
    bool m_is_connected;

    static JoypadController m_controllers[MAX_CONTROLLERS];
    static int GetControllerIndex(SDL_JoystickID instance);

    void Open(int device);
    void Close();

};
静态控制器m_控制器[最大控制器]

1> joypad.obj:错误LNK2001:未解析的外部符号“私有:静态类JoypadController*JoypadController::m_控制器”(?m_controllers@JoypadController@@0PAV1@A)


这对类JoypadController将自身用作类型有效吗?我的链接器中缺少一些简单的东西吗?

是的,类可以包含与类相同类型的静态成员。例如:

struct S {
    static S s; // declaration
};
S S::s {};      // definition
int main() {}
成员不应被定义为具有不完整类型,并且在类的定义中,该类本身是不完整的。这就是为什么不能有与类本身相同类型的非静态成员。但是,声明类的静态成员并不定义该静态成员。在类定义中声明它,然后进一步定义它


如果使用静态成员而不定义它,则会出现链接错误。这与静态成员具有与类相同的类型这一事实无关。无论何时尝试使用尚未定义的对象,都会出现链接错误。

是的,类可以包含与该类相同类型的静态成员。例如:

struct S {
    static S s; // declaration
};
S S::s {};      // definition
int main() {}
成员不应被定义为具有不完整类型,并且在类的定义中,该类本身是不完整的。这就是为什么不能有与类本身相同类型的非静态成员。但是,声明类的静态成员并不定义该静态成员。在类定义中声明它,然后进一步定义它


如果使用静态成员而不定义它,则会出现链接错误。这与静态成员具有与类相同的类型这一事实无关。无论何时尝试使用尚未定义的对象,都会出现链接错误。

是的,类可以包含与该类相同类型的静态成员。例如:

struct S {
    static S s; // declaration
};
S S::s {};      // definition
int main() {}
成员不应被定义为具有不完整类型,并且在类的定义中,该类本身是不完整的。这就是为什么不能有与类本身相同类型的非静态成员。但是,声明类的静态成员并不定义该静态成员。在类定义中声明它,然后进一步定义它


如果使用静态成员而不定义它,则会出现链接错误。这与静态成员具有与类相同的类型这一事实无关。无论何时尝试使用尚未定义的对象,都会出现链接错误。

是的,类可以包含与该类相同类型的静态成员。例如:

struct S {
    static S s; // declaration
};
S S::s {};      // definition
int main() {}
成员不应被定义为具有不完整类型,并且在类的定义中,该类本身是不完整的。这就是为什么不能有与类本身相同类型的非静态成员。但是,声明类的静态成员并不定义该静态成员。在类定义中声明它,然后进一步定义它


如果使用静态成员而不定义它,则会出现链接错误。这与静态成员具有与类相同的类型这一事实无关。无论何时尝试使用尚未定义的对象,都会出现链接错误。

…因为您现在没有取消引用指针,但仍在尝试使用引用…因为您现在没有取消引用指针,但仍在尝试使用引用…因为您现在没有取消引用指针,但仍在尝试使用引用…因为您当前没有取消引用指针,但仍在尝试使用引用我不太了解所有代码。你能帮我更详细地讲讲这门课吗?我不明白m_控制器应该定义在哪里,或者我应该如何定义它。看起来它应该像数组一样保存数据,但它调用类定义的变量。这里的代码中有一些用法:if(m_controllers[i].m_is_connected)JoypadController&jc=m_controllers[event.cdevice.which];jc.Open(event.cdevice.which)@不可能在定义
JoypadController
之后定义它,如下所示:
JoypadController JoypadController::m_controllers[MAX_controllers]可选使用初始值设定项。非常感谢。我需要进一步学习。不过,这给了我一个可以从现在开始学习的有效示例。我不太理解所有代码。你能帮我更详细地讲讲这门课吗?我不明白m_控制器应该定义在哪里,或者我应该如何定义它。看起来它应该像数组一样保存数据,但它调用类定义的变量。这里的代码中有一些用法:if(m_controllers[i].m_is_connected)JoypadController&jc=m_controllers[event.cdevice.which];jc.Open(event.cdevice.which)@不可能在定义
JoypadController
之后定义它,如下所示:
JoypadController JoypadController::m_controllers[MAX_controllers]可选使用初始值设定项。非常感谢。我需要进一步学习。不过,这给了我一个可以从现在开始学习的有效示例。我不太理解所有代码。你能帮我更详细地讲讲这门课吗?我不明白m_控制器应该定义在哪里,或者我应该如何定义它。看起来它应该像数组一样保存数据,但它调用类定义的变量。这里的代码中有一些用法:if(m_controllers[i].m_is_connected)JoypadController&jc=m_controllers[event.cdevice.which];jc.Open(event.cdevice.which)@不可能在定义
JoypadController
之后定义它,如下所示:
JoypadController JoypadController::m_controllers[MAX_controllers]可选使用初始值设定项。非常感谢。我需要进一步学习。这给了我一个有效的例子