Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ LNK 2001:初始化静态成员时未解析的外部符号_C++_Visual Studio - Fatal编程技术网

C++ LNK 2001:初始化静态成员时未解析的外部符号

C++ LNK 2001:初始化静态成员时未解析的外部符号,c++,visual-studio,C++,Visual Studio,我正在尝试实现一个虚拟键盘类,因为我有不同的键盘布局,如图所示 键盘.hpp class CKeyBoard { public: enum eKeyBoardLayout { UPPER_CASE_ALPHABETS, LOWER_CASE_ALPHABETS, UPPER_CASE_NUMBERS, LOWER_CASE_NUMBERS, MAX_KEYBOARDLAYOUTS,

我正在尝试实现一个虚拟键盘类,因为我有不同的键盘布局,如图所示

键盘.hpp

 class CKeyBoard 
 {
    public:

    enum eKeyBoardLayout
    {
        UPPER_CASE_ALPHABETS,
        LOWER_CASE_ALPHABETS,
        UPPER_CASE_NUMBERS,
        LOWER_CASE_NUMBERS,
        MAX_KEYBOARDLAYOUTS,
    };
    CKeyBoard();
    void hideCharacters(bool hide); // for password
    void setDisplayBufferLength(UNSIGNED8_T maxCharToDisplay);
    virtual ~CKeyBoard();
    static const UNSIGNED8_T const_noOfRows = 0x03; // 3 rows for character keys
    struct SLayout
    {
        UNSIGNED8_T noOfColumns[const_noOfRows];    ///< noofcolumns in each row may be different
        TypedText     textAreaFont; 
        const KeyMapping* pKeyMapping;
    };
    static const SLayout m_KeyBoardLayouts[MAX_KEYBOARDLAYOUTS];
private:
    /*methods*/
    void setKeyBoardLayout(eKeyBoardLayout);
    void backspacePressedHndlr();
    void letterCasePressedHndlr();
    void alphabetNumberToggleHndlr();
    /*members*/
    static const UNSIGNED8_T const_maxNoOfKeysSupprtd = 26;
    CKey m_keyArray[const_maxNoOfKeysSupprtd]; 
    CMenuItem m_KeySpaceBar;
    CMenuToggle m_KeyCaseSwitch;
    CMenuToggle m_KeyAlphaNum;
    CMenuItem m_keyBackSpace;
    eKeyBoardLayout m_eCurrentKeyLayout;
    CKeyBoardDisplayArea m_DisplayArea;
但我仍然得到未解析的外部符号作为链接器错误。 我做错了什么

错误详细信息: * 错误LNK2001:未解析的外部符号“public:static struct CKeyBoard::SLayout const*const CKeyBoard::m_键盘布局”(?m_KeyBoardLayouts@CKeyBoard@@2QBUSLayout@1@(B)
*

您忘记添加类作用域:

static const CKeyBoard::SLayout   
    CKeyBoard::m_KeyBoardLayouts[CKeyBoard::MAX_KEYBOARDLAYOUTS]

事实上,很遗憾编译器没有像这样警告静态链接。。。这是一个常见错误。

您忘记添加类范围:

static const CKeyBoard::SLayout   
    CKeyBoard::m_KeyBoardLayouts[CKeyBoard::MAX_KEYBOARDLAYOUTS]

事实上,很遗憾编译器没有像这样警告静态链接。。。这是一个常见的错误。

哦。。谢谢你指出这一点。。但是当我进行编辑时,另一个奇怪的错误出现了。错误C2720:'CKeyBoard::m_KeyBoardLayouts':'static'存储类说明符在members keyboard.cpp上非法,通过如下初始化解决。CKeyBoard::SLayout const CKeyBoard::m_键盘布局[CKeyBoard::MAX_键盘布局]为什么会发生这种情况?(我知道我做的初始化是错误的),这是C++。您将其声明为静态,但只定义符号。(你没有在你的定义之前添加
public
,是吗?读到这里:哦..谢谢你指出这一点..但是当我进行编辑时,另一个奇怪的错误出现了。错误C2720:'CKeyBoard::m_KeyBoardLayouts':'static'存储类说明符在members keyboard.cpp上是非法的。通过如下初始化解决了这个问题。CKeyBoard::SLayout const CKeyBoard:MyKeBODAdWorks[CKEn::Max ByKBOAdLayOuts]为什么会发生这种情况?(我知道我做的初始化是错误的),即C++。您将其声明为静态,但只定义符号。(您没有在定义之前添加
public
,是吗?请阅读此处: