2016-12-11 9 views
0

나는 모스 부호에 대한 정의를 작성하기 위해 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; 
} 
+1

'encodeMap'을 static으로 만들거나'MorseCode' 생성자에서 초기화하십시오. –

+0

모스 코드에서 encodeMap을 초기화하는 구문과 관련하여 매우 혼란 스럽습니다. 시도했습니다. MorseCode :: encodeMap Morse.h의 개인 섹션에서 초기화하지 않으시겠습니까? 정적으로 만들거나 다른 곳에서 초기화하지 않고 내 .cpp에서 encodeMap을 채울 수 있습니까? –

+0

user4581301이 질문에 친절하게 답변합니다. 관련이없는 몇 가지 힌트 : 1) https://stackoverflow.com/q/1452721/6646408 헤더 파일에'using namespace std'를 사용하지 마십시오. 2)'_MORSE_H'는 밑줄과 대문자로 시작하므로 예약 된 이름입니다. 엄지 손가락의 안전한 법칙 : 두 번째 밑줄이나 밑줄 앞에 식별자 이름을 사용하지 마십시오. 3)'_MORSE_H' 포함 가드 매크로에 값을 할당하는 것은 불필요합니다. 중요한 것은 그 이름의 매크로가 전혀 정의되지 않았다는 것입니다. 고유성을 확보하려는 것이 목표라면 임의의 문자를 매크로 이름 자체에 추가해야했습니다. – besc

답변

0

같습니다

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', "-----" }, 
    { '.', ".-.-.-" }, { ',', "--..--" }, { ':', "---..." }, { '?', "..--.." }, { '-', "-...-" }, 
    { '/', "-..-." } 
}; 

또는 Morse.cpp 변화에서는 Member Initializer List

를 추가

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을 채우는 방법의 예제를 찾을 수 없습니다! 고맙습니다! 이것은 나를 또 다른 퍼즐로 안내합니다. 이 코드의 용도는 무엇입니까?또한 사과 질문을 게시 할 때 사용할 수있는 편리한 도구 상자가 없으면이 텍스트를 "코드화"하는 방법을 알 수 없습니다. 문자열 enCode (const char &) const; char deCode (const string &) const; –

+0

@BrenBailey 코드화로 할 수있는 최선의 방법은 ~을 사용하여 대부분의 북미 영어 키보드에있는 '액센트 (accent)'를 사용하는 것입니다. 그리고 심지어 코드는 모두 한 줄로 뭉개집니다. 그것들은'모스 코드'방법의 선언입니다. 이러한 메소드를 구현해야합니다. 당신의 교과서는 내가 말할 수있는 것보다 더 잘 설명 할 수 있어야합니다. [그리고 할 수 없다면이 사람이 할 수 있습니다.] (https://www.amazon.com/dp/0321992784/?tag=stackoverfl08-20) 여기에 매우 유복 한 방식으로 필요한 것을 찾을 수도 있습니다. https : //isocpp.org/tour – user4581301