2016-12-11 2 views
0

Ich arbeite an einem Projekt, wo ich unordered_maps verwenden muss, um Definitionen für Morsecode zu erstellen und sie dann für die Übersetzung in und aus Morsecode zu verwenden. Ich bin völlig im Verlust, wie in der Welt ich eine privat deklarierte unordered_map aus einem Header in der .cpp-Datei füllen sollte.C++ Wie implementiert man eine unordered_map in .cpp, die in einem Header instanziiert ist?

Die Verwendung von privaten Member-Funktionen über Dateien war eine unglaubliche Kopfschmerzen in C++ für mich und keine Menge der Forschung hat es überhaupt klar gemacht, wie es tatsächlich funktioniert, so dass jeder Rat sehr willkommen ist. Vielen Dank.

Hier ist mein Code.

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

Entweder make 'encodeMap' statisch machen oder im' MorseCode'-Konstruktor initialisieren. –

+0

Ich bin sehr verwirrt hinsichtlich der Syntax der Initialisierung von encodeMap in MorseCode. Ich habe es versucht MorseCode :: encodeMap Meinen Sie nicht zu initialisieren es im privaten Abschnitt von Morse.h? Ist es nicht möglich, encodeMap in meine .cpp zu füllen, ohne es statisch zu machen oder anderswo zu initialisieren? –

+0

user4581301 beantwortet Ihre Frage gut. Einige nicht verwandte Hinweise: 1) https://stackoverflow.com/q/1452721/6646408 Verwenden Sie nicht 'using namespace std' in Header-Dateien 2)' _MORSE_H' ist ein reservierter Name, da er mit einem Unterstrich und einem Großbuchstaben beginnt. Sichere Faustregel: Verwenden Sie keine Bezeichner mit doppelten Unterstrichen oder einem führenden Unterstrich. 3) Das Zuweisen eines Werts zu dem _ _MORSE_H-Include-Guard-Makro ist überflüssig. Es kommt nur darauf an, ob ein Makro dieses Namens überhaupt definiert ist. Wenn Sie sicherstellen wollten, dass Sie eindeutig sind, mussten Sie dem Makronamen selbst zufällige Zeichen hinzufügen. – besc

Antwort

0

Es sieht aus wie, was Sie nach ist entweder ein static Mitglied

In Morse.h Änderung

unordered_map<char,string> encodeMap; 

bis

static unordered_map<char,string> encodeMap; 

und in Morse.cpp hinzufügen

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

Oder eine Member Initializer List

In Morse.cpp Änderung

MorseCode::MorseCode() 
{ 
} 

zu

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

Die erste Option, static, ist wahrscheinlich die bessere, weil sie nicht die encodeMap in jedem Fall von MorseCode wiederholt.

Machen Sie dasselbe mit decodeMap.

+0

Ah! Die Syntax von "MorseCode :: MorseCode(): encodeMap" war was ich bekam! Ich konnte kein Beispiel finden, wie man eine unordered_map aus einer Header-Datei irgendwo füllen kann! Vielen Dank! Das führt mich jedoch zu einem anderen Puzzle. Was nutzt dieser Code?Ich entschuldige mich auch dafür, dass ich nicht herausfinden kann, wie man diesen Text ohne die praktische Toolbox, die beim Posten von Fragen verfügbar ist, "kodifizieren" kann. Zeichenfolge enCode (const char &) const; char deCode (Konstante Zeichenfolge &) const; –

+0

@BrenBailey Das Beste, was Sie mit Kodierung tun können, ist der 'Akzent, der auf den meisten nordamerikanischen englischen Tastaturen mit dem ~ sitzt. Und selbst dann wird der Code auf eine Zeile geschrieben. Das sind Deklarationen von Methoden von MorseCode. Sie müssen diese Methoden implementieren. Ihr Lehrbuch sollte das besser erklären können als ich in einem Kommentar. [Und wenn es nicht möglich ist, kann dieser eine.] (Https://www.amazon.com/dp/0321992784/?tag=stackoverfl08-20) Sie können auch finden, was Sie auf eine sehr abgerundete Weise hier brauchen: https : //isocpp.org/tour – user4581301

Verwandte Themen