【问题标题】:type/value mismatch in template C++ class declaration [duplicate]模板 C++ 类声明中的类型/值不匹配 [重复]
【发布时间】:2010-10-25 00:02:48
【问题描述】:

我正在尝试使用 gcc 4.2 在 Linux 上编译以下代码:

#include <map>
#include <list>

template<typename T>
class A
{
...

private:
    std::map<const T, std::list<std::pair<T, long int> >::iterator> lookup_map_;
    std::list<std::pair<T, long int> > order_list_;

};

当我编译这个类时,我从 gcc 收到以下消息:

error: type/value mismatch at argument 2 in template parameter list for ‘template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map’
error:   expected a type, got ‘std::list<std::pair<const T, long int>,std::allocator<std::pair<const T, long int> > >::iterator’
error: template argument 4 is invalid

我删除了文件名和行号,但它们都引用了声明地图的行。

当我用 int 或某种具体类型替换这些表达式中的对时,它编译得很好。有人可以向我解释我做错了什么。

【问题讨论】:

    标签: c++ templates


    【解决方案1】:

    你需要在std::list&lt;...&gt;::iterator之前写typename,因为iterator是一个嵌套类型,你正在写一个模板。

    编辑:没有typename,GCC 假定(按照标准要求)iterator 实际上是list 中的静态变量,而不是类型。因此出现“参数类型不匹配”错误。

    【讨论】:

      【解决方案2】:

      您的代码需要一个“typename”关键字。

          std::map<const T, typename std::list<std::pair<T, long int> >::iterator> lookup_map_;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-17
        • 2015-07-29
        相关资源
        最近更新 更多