2017-03-29 103 views
1

我試圖製作一個MARIE代碼模擬器,或者任何你會稱之爲的,我試圖避免一個長開關的情況下訪問類中的一些私人功能。如何初始化私有成員函數指針的靜態映射?

MARIEapp.h:

MARIEapp.h{ 
public: 
    typedef void (MARIEapp::*Instruction)(); 
private: 
    static std::map<char, Instruction> MARIEinstruction; 
    void JnS(); 
    void Load(); 
    void Store(); 
    void Add(); 
    void Subt(); 
    void Input(); 
    void Output(); 
    void Halt(); 
    void Skipcond(); 
    void Jump(); 
    void Clear(); 
    void AddI(); 
    void JumpI(); 
    void LoadI(); 
    void StoreI(); 
}; 

MARIEapp.cpp:

static std::map<char, MARIEapp::Instruction> MARIEinstruction = { 
    { '0', &MARIEapp::JnS }, 
    { '1', &MARIEapp::Load }, 
    { '2', &MARIEapp::Store }, 
    { '3', &MARIEapp::Add }, 
    { '4', &MARIEapp::Subt }, 
    { '5', &MARIEapp::Input }, 
    { '6', &MARIEapp::Output }, 
    { '7', &MARIEapp::Halt }, 
    { '8', &MARIEapp::Skipcond }, 
    { '9', &MARIEapp::Jump }, 
    { 'A', &MARIEapp::Clear }, 
    { 'B', &MARIEapp::AddI }, 
    { 'C', &MARIEapp::JumpI }, 
    { 'D', &MARIEapp::LoadI }, 
    { 'E', &MARIEapp::StoreI } 
}; 

的void函數的一長串訪問私有成員和cpp文件

的問題是正確定義當初始化MARIEinstruction地圖時,我得到一個錯誤,說這些函數不可訪問。我知道這是因爲他們是私人的,我可以通過公開他們來解決這個問題。

有沒有一種方法可以做到這一點,並將這些全部視爲私密? 也有任何其他方式,你推薦我這樣做?

回答

1

不用擔心,您可以從靜態類成員的初始化程序中命名私有成員,就像從成員函數的定義中一樣。

這裏的麻煩在於你沒有定義靜態類成員。您正在定義名爲MARIEinstruction的無關全局對象。要定義類成員,您必須使用類成員訪問語法MARIEapp::MARIEinstruction。此外,不要在定義上放置static關鍵字,只需在聲明上。

std::map<char, MARIEapp::Instruction> MARIEapp::MARIEinstruction = { 
    { '0', &MARIEapp::JnS }, 
    { '1', &MARIEapp::Load }, 
    { '2', &MARIEapp::Store }, 
    { '3', &MARIEapp::Add }, 
    { '4', &MARIEapp::Subt }, 
    { '5', &MARIEapp::Input }, 
    { '6', &MARIEapp::Output }, 
    { '7', &MARIEapp::Halt }, 
    { '8', &MARIEapp::Skipcond }, 
    { '9', &MARIEapp::Jump }, 
    { 'A', &MARIEapp::Clear }, 
    { 'B', &MARIEapp::AddI }, 
    { 'C', &MARIEapp::JumpI }, 
    { 'D', &MARIEapp::LoadI }, 
    { 'E', &MARIEapp::StoreI } 
}; 
+0

您還想標註地圖'const'您可能不想更改它。 – OmnipotentEntity

+0

謝謝,這有幫助,但現在我怎麼會這樣做它是一個常量? –

相關問題