0
私は、図のように異なるキーボードレイアウトを使用しているため、vitual Keyboardクラスを実装しようとしています。LNK 2001:静的メンバーの初期化中に未解決の外部シンボル
KeyBoard.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;
}。
私は静的メンバーをcppファイルで次のように初期化しています。 KeyBoard.cpp
static const CKeyBoard::SLayout m_KeyBoardLayouts[CKeyBoard::MAX_KEYBOARDLAYOUTS] = \
{
// UPPER_CASE_ALPHABETS,
{
{ 10, 9, 7 },
TypedText(T_KEYBOARD),
&keyMappingsAlphaUpper[0],
},
// LOWER_CASE_ALPHABETS,
{
{ 10, 9, 7 },
TypedText(T_KEYBOARD),
&keyMappingsAlphaLower[0],
},
// UPPER_CASE_NUMBERS,
{
{ 10, 10, 5 },
TypedText(T_KEYBOARD),
&keyMappingsNumLower[0],
},
// LOWER_CASE_NUMBERS,
{
{ 10, 10, 5 },
TypedText(T_KEYBOARD),
&keyMappingsNumLower[0]
},
};
// Other function definitions
CKey::CKey() : m_pCallback(NULL)
{
}
しかし、それでもまだ、私はリンカエラーとして未解決の外部シンボルを取得しています。 ここで何が間違っていますか?
エラーの詳細: * エラーLNK2001:未解決の外部シンボル "パブリック:静的構造体CKeyBoard :: SLayoutのCONST * constのCKeyBoard :: m_KeyBoardLayouts"(B @ m_KeyBoardLayouts @ CKeyBoard @@ 2QBUSLayout @ 1?) *
ああ..それを指摘してくれてありがとう。 しかし、私が編集したときに、別の奇妙なエラーが発生しました。 エラーC2720: 'CKeyBoard :: m_KeyBoardLayouts':メンバで 'static'ストレージクラス指定子が不正です\t keyboard.cpp \t そして、次のように初期化して解決しました。 CKeyBoard :: SLayout const CKeyBoard :: m_KeyBoardLayouts [CKeyBoard :: MAX_KEYBOARDLAYOUTS] – kernel
なぜこれが起こっていますか? (私が行った初期化が間違っていることを認識しています) – kernel
これはC++です:)。あなたはそれを '静的'と宣言しますが、シンボルを定義するだけです。 (あなたはあなたの定義の前に 'public'を追加しませんか?ここで読む:http://en.cppreference.com/w/cpp/language/static – xtofl