Я работаю над проектом, где я должен использовать 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;
}
Либо make 'encodeMap' static, либо инициализировать его в конструкторе' МорзеКод'. –
Я очень смущен относительно синтаксиса инициализации encodeMap в MorseCode. Я пробовал делать MorseCode :: encodeMap Вы хотите не инициализировать его в приватном разделе Morse.h? Невозможно ли заполнить encodeMap в моем .cpp, не делая его статическим или инициализируя его в другом месте? –
user4581301 отвечает на ваш вопрос красиво. Некоторые несвязанные подсказки: 1) https://stackoverflow.com/q/1452721/6646408 Не используйте 'using namespace std' в файлах заголовков 2)' _MORSE_H' является зарезервированным именем, потому что оно начинается с подчеркивания и заглавной буквы. Безопасное эмпирическое правило: не используйте имена идентификаторов с двойными подчеркиваниями или ведущим подчеркиванием. 3) Присвоение значения макросу «_MORSE_H» включает защитный макрос. Единственное, что имеет значение, - это если макрос этого имени определен вообще. Если ваша цель состояла в том, чтобы обеспечить уникальность, вам нужно было добавить случайные символы к самому макрокоманду. – besc