неупорядоченная карта — 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: ?).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]