1

我有 2 个类 (firstClasssecondClass),它们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我可以轻松地修改它(添加新元素,或更改某些键的值)。但是,在嵌套地图中我无能为力。

我知道它应该是微不足道的,但我不知道如何解决它。任何想法?

4

1 回答 1

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:?)。

于 2015-11-23T16:26:30.083 回答