【问题标题】:Not a class, namespace or enumeration?不是类、命名空间或枚举?
【发布时间】:2016-03-27 14:23:18
【问题描述】:

我的老师给了我一个要学习的代码,我不知道什么时候我 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

    //....
}

【问题讨论】:

  • 我没有看到 typedefri 是一个对象。
  • 那么,你能告诉我“ri::key_compare comp”是做什么的吗?
  • 它无法编译,因为ri 不能与:: 一起使用,所以它实际上什么都不做。
  • 所以只有类类型适用于 :: ?
  • 不,所有范围标识符,还包括命名空间和类。从纯逻辑的角度来看,对象应该如何作为作用域工作?

标签: c++ cyclic-dependency


【解决方案1】:

嗯,原因很清楚:ri 不是类、命名空间或枚举。它是一个对象。

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

map <string, string>::key_compare comp; 

或 (C++11)

decltype(ri)::key_compare comp; 

【讨论】:

    猜你喜欢
    • 2014-07-24
    • 2011-07-08
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多