C++ LNK 2001:初始化静态成员时未解析的外部符号
我正在尝试实现一个虚拟键盘类,因为我有不同的键盘布局,如图所示 键盘.hppC++ 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,
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
,是吗?请阅读此处: