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;
}
Entweder make 'encodeMap' statisch machen oder im' MorseCode'-Konstruktor initialisieren. –
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? –
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