나는 모스 부호에 대한 정의를 작성하기 위해 unordered_maps를 사용해야하고 모스 부호로 변환하고 모스 부호로 변환하는 데 사용해야하는 프로젝트에 참여하고 있습니다. 전 세계적으로 .cpp 파일의 헤더에서 비공개로 선언 된 unordered_map을 채우는 방법을 완전히 망각하고 있습니다.C++ 헤더에서 인스턴스화되는 .cpp에서 unordered_map을 구현하는 방법은 무엇입니까?
파일 전체에서 개인 회원 기능을 사용하는 것은 나를위한 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 : 당신이 뒤에있는 것은 Morse.h 변화에서는 static
회원
중 하나처럼
#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;
}
'encodeMap'을 static으로 만들거나'MorseCode' 생성자에서 초기화하십시오. –
모스 코드에서 encodeMap을 초기화하는 구문과 관련하여 매우 혼란 스럽습니다. 시도했습니다. MorseCode :: encodeMap Morse.h의 개인 섹션에서 초기화하지 않으시겠습니까? 정적으로 만들거나 다른 곳에서 초기화하지 않고 내 .cpp에서 encodeMap을 채울 수 있습니까? –
user4581301이 질문에 친절하게 답변합니다. 관련이없는 몇 가지 힌트 : 1) https://stackoverflow.com/q/1452721/6646408 헤더 파일에'using namespace std'를 사용하지 마십시오. 2)'_MORSE_H'는 밑줄과 대문자로 시작하므로 예약 된 이름입니다. 엄지 손가락의 안전한 법칙 : 두 번째 밑줄이나 밑줄 앞에 식별자 이름을 사용하지 마십시오. 3)'_MORSE_H' 포함 가드 매크로에 값을 할당하는 것은 불필요합니다. 중요한 것은 그 이름의 매크로가 전혀 정의되지 않았다는 것입니다. 고유성을 확보하려는 것이 목표라면 임의의 문자를 매크로 이름 자체에 추가해야했습니다. – besc