不是类、命名空间或枚举

Not a class, namespace or enumeration?

本文关键字:枚举 命名空间      更新时间:2023-10-16

我的老师给了我一个要学习的代码,我不知道当我typedef映射(正如我在代码中所评论的)时,它可以正常工作,但当我在没有typedef的情况下定义时,它似乎不起作用。如果有人能解释一下,我将不胜感激!我读过一些关于"循环依赖"的文章,但不确定这里是否是这样。

int main (){
    map <string, string> ri; // typedef map<string, string> maps;
    //maps ri;
    ri.insert(pair<string, string>{"Smoljan", "Dragan"});
    ri.insert(pair<string, string>{"Smolver", "Tina"});
    ri.insert(pair<string, string>{"Mirkovic", "Sonja"});
    string in;
    cout<<"Input:";
    cin>>in;
    string high(in);
    high.back()++;
    auto low = ri.lower_bound(in);
    /*(maps)*/ ri::key_compare comp;  //<----- here is the error
    //....
}

原因很清楚:ri不是类、命名空间或枚举。它是一个物体。

您需要的是将使用typedef:type-name放置的内容放在分号之前。

map <string, string>::key_compare comp; 

或(C++11)

decltype(ri)::key_compare comp;