2016-12-11 1 views
0

Я работаю над проектом, где я должен использовать unordered_maps для создания определений для кода Морзе, а затем использовать их для перевода в и из кода Морзе. Я полностью потеряю, как в мире я должен заполнить частное объявленное unordered_map из заголовка в .cpp-файле.C++ Как реализовать unordered_map в .cpp, который создается в заголовке?

Использование частных функций-членов в файлах было невероятной головной болью в C++ для меня, и никакие исследования не дали понять, как это работает, поэтому любой совет очень приветствуется. Благодарю.

Вот мой код.

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

Либо make 'encodeMap' static, либо инициализировать его в конструкторе' МорзеКод'. –

+0

Я очень смущен относительно синтаксиса инициализации encodeMap в MorseCode. Я пробовал делать MorseCode :: encodeMap Вы хотите не инициализировать его в приватном разделе Morse.h? Невозможно ли заполнить encodeMap в моем .cpp, не делая его статическим или инициализируя его в другом месте? –

+0

user4581301 отвечает на ваш вопрос красиво. Некоторые несвязанные подсказки: 1) https://stackoverflow.com/q/1452721/6646408 Не используйте 'using 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, скорее всего, лучший, потому что он не повторяет encodeMap во всех случаях MorseCode.

Сделайте то же самое с decodeMap.

+0

Ах! Синтаксис «MorseCode :: MorseCode(): encodeMap» был тем, что меня доставало! Я не мог найти пример того, как заполнить unordered_map из файла заголовка где угодно! Спасибо! Это действительно приводит меня к еще одной загадке. Что такое использование этого кода?Также извинения не могу понять, как «кодифицировать» этот текст без удобной панели инструментов, доступной при публикации вопросов. строка enCode (const char &) const; char deCode (const string &) const; –

+0

@BrenBailey Лучшее, что вы можете сделать с кодификацией, - это использовать «акцент, который сидит на большинстве клавиатур североамериканского английского с символом ~. И даже тогда код будет сбрасываться на одну строку. Это объявления методов «МорзеКод». Вам нужно будет реализовать эти методы. Ваш учебник должен быть в состоянии объяснить это лучше, чем я могу в комментарии. [И если это невозможно, это можно сделать.] (Https://www.amazon.com/dp/0321992784/?tag=stackoverfl08-20). Вы также можете найти то, что вам нужно, в значительно сокращенном виде: https : //isocpp.org/tour – user4581301

Смежные вопросы