У меня 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
Я могу легко изменить его (добавить новые элементы или изменить значения некоторых ключей). Но во вложенной карте я ничего не могу сделать.
Я знаю, что это должно быть тривиально, но я не знаю, как это решить.
Любая идея?
Вы не передаете по ссылке, вы передаете указатель. Это версия с использованием ссылки:
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:
?).
Других решений пока нет …