在osx

时间:2018-05-07 23:34:04

标签: c++ macos insert multimap

我需要一些帮助!我使用多重映射来映射音符的索引,因此我可以通过音符的字符串名称以及int值来访问它们。但是,代码在Windows上完全正常,但在将其移动到OSX(最新版本)时。我得到一个"线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x0)"任何时候插入使用时都会出错。

Runtime Error

我知道我没有使用最佳方法将注释和索引插入到multimap中,但我打算重写它。

我尝试了几种方法让它运转起来,但没有成功。这是代码。

标题

class zelmNote
{
private:
    static bool bNoteMapped;
    static multimap<int, string> noteToName;
    static multimap<string, int> nameToNote;

    static void mapNotes();

public:
    zelmNote();
};

的.cpp

multimap<int, string> zelmNote::noteToName;
multimap<string, int> zelmNote::nameToNote;

void zelmNote::mapNotes()
{
    bNoteMapped = true;
    int i = 9;
    string noteName = "";
    /*intToNote.insert(pair<int, string>(8, "G#"));
    noteToInt.insert(pair<string, int>("G#", 8));
    intToNote.insert(pair<int, string>(8, "Ab"));
    noteToInt.insert(pair<string, int>("G#", 8));*/
    //Do natural notes
    for (char c = 'A'; c <= 'G'; c++)
    {
        noteName = ofToString(c);
        noteToName.insert(pair<int, string>(i, noteName));
        nameToNote.insert(pair<string, int>(noteName, i));
        if (i == 11)
        {
            i = 0;
        }
        else if (i == 4)
        {
            i++;
        }
        else if ((i != 11) || (i != 4))
        {
            i += 2;
        }
    }


    //Do sharps
    noteToName.insert(pair<int, string>(0, "B#"));
    nameToNote.insert(pair<string, int>("B#", 0));

    noteToName.insert(pair<int, string>(1, "C#"));
    nameToNote.insert(pair<string, int>("C#", 1));

    noteToName.insert(pair<int, string>(3, "D#"));
    nameToNote.insert(pair<string, int>("D#", 3));

    noteToName.insert(pair<int, string>(4, "D##"));
    nameToNote.insert(pair<string, int>("D##", 4));

    noteToName.insert(pair<int, string>(5, "E#"));
    nameToNote.insert(pair<string, int>("E#", 5));

    noteToName.insert(pair<int, string>(6, "F#"));
    nameToNote.insert(pair<string, int>("F#", 6));

    noteToName.insert(pair<int, string>(8, "G#"));
    nameToNote.insert(pair<string, int>("G#", 8));

    noteToName.insert(pair<int, string>(10, "A#"));
    nameToNote.insert(pair<string, int>("A#", 10));


    //Do flats
    noteToName.insert(pair<int, string>(11, "Cb"));
    nameToNote.insert(pair<string, int>("Cb", 11));

    noteToName.insert(pair<int, string>(0, "Dbb"));
    nameToNote.insert(pair<string, int>("Dbb", 0));

    noteToName.insert(pair<int, string>(1, "Db"));
    nameToNote.insert(pair<string, int>("Db", 1));

    noteToName.insert(pair<int, string>(3, "Eb"));
    nameToNote.insert(pair<string, int>("Eb", 3));

    noteToName.insert(pair<int, string>(4, "Fb"));
    nameToNote.insert(pair<string, int>("Fb", 4));

    noteToName.insert(pair<int, string>(6, "Gb"));
    nameToNote.insert(pair<string, int>("Gb", 6));

    noteToName.insert(pair<int, string>(8, "Ab"));
    nameToNote.insert(pair<string, int>("Ab", 8));

    noteToName.insert(pair<int, string>(10, "Bb"));
    nameToNote.insert(pair<string, int>("Bb", 10));
}

zelmNote::zelmNote()
{
    if (!bNoteMapped)
    {
        mapNotes();
    }
}

0 个答案:

没有答案