C++ передает вложенную unordered_map по ссылке и манипулирует ею

У меня 2 класса (firstClass а также secondClass) из которых firstClass друг secondClassи имеет частное вложенное std::unordered_map, который я хочу получить к нему доступ в функции secondClass,

Так что в основном код выглядит так:

class secondClass;
typedef unordered_map STable<unsigned, unordered_map<unsigned, double> > NESTED_MAP;

class firstClass {
    friend class secondClass;

    void myfunc1(secondClass* sc) {
        sc->myfunc2(&STable);
    }

private:
    NESTED_MAP STable;
};

class secondClass {
public:
    void myfunc2(NESTED_MAP* st) {
        //Here I want to insert some elements in STable.
        //Something like:
        st[1][2] = 0.5;
    }
};

int main() {
    firstClass  fco;
    secondClass sco;
    fco.myfunc1(&sco);
    return 0;
}

Дело в том, что если вместо вложенной карты я использую простую std::unordered_mapЯ могу легко изменить его (добавить новые элементы или изменить значения некоторых ключей). Но во вложенной карте я ничего не могу сделать.

Я знаю, что это должно быть тривиально, но я не знаю, как это решить. Любая идея?

1 ответ

Решение

Вы не передаете по ссылке, вы передаете указатель. Это версия с использованием ссылки:

void myfunc2(NESTED_MAP &st)
{
    st[1][2] = 0.5; // valid, st dereferenced implicitly
}

И звоните без адреса оператора:

sc->myfunc2(STable);

Если вы действительно хотите передать указатель, необходимо явно разыменовать:

void myfunc2(NESTED_MAP *st)
{
    (*st)[1][2] = 0.5;

    // or, if you like:
    st->operator[](1)[2] = 0.5;
}

В коде вы разместили, вы firstClass имеет только частных участников (забыл public:?).

Другие вопросы по тегам