2016-12-11 32 views
0

我正在開發一個項目,我必須使用unordered_maps爲莫爾斯碼創建定義,然後使用它們來翻譯摩斯密碼。我完全喪失瞭如何在世界上我應該從.cpp文件中的頭部填充私下聲明的unordered_map。C++如何在頭文件中實例化的.cpp中實現unordered_map?

跨文件使用私有成員函數對我來說是一個令人難以置信的頭痛,並沒有任何研究使它完全清楚它是如何工作的,因此任何建議都非常受歡迎。謝謝。

這是我的代碼。

Morse.h:

#ifndef _MORSE_H 
#define _MORSE_H 3710201612 

#define MORSE_SET 45 

#include <string> 
#include <unordered_map> 

using namespace std; 

class MorseCode 
{ 
    public: 
    MorseCode(); 

    string enCode(const char&) const; 
    char deCode(const string&) const; 

    private: 
    unordered_map<char,string> encodeMap; 
    unordered_map<string,char> decodeMap; 
}; 

#endif 

Morse.cpp:

#include <iostream> 
#include <string> 
#include <unordered_map> 

#include "Morse.h" 
using namespace std; 

MorseCode::MorseCode() 
{ 
} 

string MorseCode::encodeMap 
{ 
    { 'A', ".-" }, { 'B', "-..." }, { 'C', "-.-." }, { 'D', "-.." }, { 'E', "." }, 
    { 'F', "..-." }, { 'G', "--." }, { 'H', "...." }, { 'I', ".." }, { 'J', ".---" }, { 'K', "-.-" }, 
    { 'L', ".-.." }, { 'M', "--" }, { 'N', "-." }, { 'O', "---" }, { 'P', ".--." }, { 'Q', "--.-" }, 
    { 'R', ".-." }, { 'S', "..." }, { 'T', "-" }, { 'U', "..-" }, { 'V', "...-" }, { 'W', ".--" }, 
    { 'X', "-..-" }, { 'Y', "-.--" }, { 'Z', "--.." }, { '1', ".----" }, { '2', "..---" }, { '3', "...--" }, { '4', "....-" }, 
    { '5', "....." }, { '6', "-...." }, { '7', "--..." }, { '8', "---.." }, { '9', "----." }, { '0', "-----" }, 
    { '.', ".-.-.-" }, { ',', "--..--" }, { ':', "---..." }, { '?', "..--.." }, { '-', "-...-" }, 
    { '/', "-..-." } 
}; 

char MorseCode::deCode(const string &) const 
{ 
    return 0; 
} 
+1

要麼使'encodeMap'靜態,要麼在'MorseCode'構造函數中初始化它。 –

+0

對於在MorseCode中初始化encodeMap的語法,我感到非常困惑。 我試過 MorseCode :: encodeMap 你的意思是不要在Morse.h的私人部分初始化它嗎?是不是可以在我的.cpp中填充encodeMap而不將其設置爲靜態或在別處初始化它? –

+0

user4581301很好地回答你的問題。一些無關的提示:1)https://stackoverflow.com/q/1452721/6646408不要在頭文件中使用'namespace std' 2)'_MORSE_H'是一個保留名稱,因爲它以下劃線和大寫字母開頭。安全的經驗法則:不要使用帶有雙下劃線或前導下劃線的標識符名稱。 3)爲'_MORSE_H'包含保護宏賦值是多餘的。唯一重要的是如果一個名字的宏被定義的話。如果您的目標是確保唯一性,您需要將隨機字符添加到宏名稱本身。 – besc

回答

0

它看起來像你以後有什麼可以是一個static成員

在Morse.h變化

unordered_map<char,string> encodeMap; 

static unordered_map<char,string> encodeMap; 

和Morse.cpp添加

unordered_map<char,string> MorseCode::encodeMap{ 
    { 'A', ".-" }, { 'B', "-..." }, { 'C', "-.-." }, { 'D', "-.." }, { 'E', "." }, 
    { 'F', "..-." }, { 'G', "--." }, { 'H', "...." }, { 'I', ".." }, { 'J', ".---" }, { 'K', "-.-" }, 
    { 'L', ".-.." }, { 'M', "--" }, { 'N', "-." }, { 'O', "---" }, { 'P', ".--." }, { 'Q', "--.-" }, 
    { 'R', ".-." }, { 'S', "..." }, { 'T', "-" }, { 'U', "..-" }, { 'V', "...-" }, { 'W', ".--" }, 
    { 'X', "-..-" }, { 'Y', "-.--" }, { 'Z', "--.." }, { '1', ".----" }, { '2', "..---" }, { '3', "...--" }, { '4', "....-" }, 
    { '5', "....." }, { '6', "-...." }, { '7', "--..." }, { '8', "---.." }, { '9', "----." }, { '0', "-----" }, 
    { '.', ".-.-.-" }, { ',', "--..--" }, { ':', "---..." }, { '?', "..--.." }, { '-', "-...-" }, 
    { '/', "-..-." } 
}; 

還是一個Member Initializer List

在Morse.cpp變化

MorseCode::MorseCode() 
{ 
} 

MorseCode::MorseCode(): encodeMap { 
      { 'A', ".-" }, { 'B', "-..." }, { 'C', "-.-." }, { 'D', "-.." }, { 'E', "." }, 
      { 'F', "..-." }, { 'G', "--." }, { 'H', "...." }, { 'I', ".." }, { 'J', ".---" }, { 'K', "-.-" }, 
      { 'L', ".-.." }, { 'M', "--" }, { 'N', "-." }, { 'O', "---" }, { 'P', ".--." }, { 'Q', "--.-" }, 
      { 'R', ".-." }, { 'S', "..." }, { 'T', "-" }, { 'U', "..-" }, { 'V', "...-" }, { 'W', ".--" }, 
      { 'X', "-..-" }, { 'Y', "-.--" }, { 'Z', "--.." }, { '1', ".----" }, { '2', "..---" }, { '3', "...--" }, { '4', "....-" }, 
      { '5', "....." }, { '6', "-...." }, { '7', "--..." }, { '8', "---.." }, { '9', "----." }, { '0', "-----" }, 
      { '.', ".-.-.-" }, { ',', "--..--" }, { ':', "---..." }, { '?', "..--.." }, { '-', "-...-" }, 
      { '/', "-..-." } 
     } 
{ 
} 

第一個選項static可能更好,因爲它不會在MorseCode的每個實例中重複encodeMap

decodeMap一樣。

+0

啊! 「MorseCode :: MorseCode():encodeMap」的語法是什麼讓我!我找不到如何從任何地方的頭文件填充unordered_map的例子!謝謝! 這確實讓我想到另一個難題。 這段代碼有什麼用?也道歉,我不知道如何「編纂」這個文本沒有方便的工具箱,當發佈問題時可用。 string enCode(const char&)const; char deCode(const string&)const; –

+0

@BrenBailey你可以用編碼來做的最好的事情就是使用大部分北美英語鍵盤上帶有〜的口音。即使如此,代碼將全部被淹沒在一條線上。那些是'MorseCode'方法的聲明。您將需要實施這些方法。你的教科書應該能夠比評論中更好地解釋這一點。 [如果它不能,這個可以。](https://www.amazon.com/dp/0321992784/?tag=stackoverfl08-20)你也可以在這裏找到你需要的東西:https ://isocpp.org/tour – user4581301

相關問題