C ++如何在头文件中实例化的.cpp中实现unordered_map?

时间:2016-12-11 04:52:49

标签: c++ header unordered-map private-members

我正在开发一个项目,我必须使用unordered_maps为莫尔斯代码创建定义,然后使用它们来转换为莫尔斯代码。我完全不知道在世界上我应该如何从.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:

#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 个答案:

答案 0 :(得分:0)

看起来你所追求的是static成员

在Morse.h中更改

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

Member Initializer List

在Morse.cpp中更改

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执行相同操作。