c++ - 模板 C++ 类声明中的类型/值不匹配

标签 c++ templates

<分区>

我正在尝试使用 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

我删除了文件名和行号,但它们都指的是声明 map 的行。

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

最佳答案

你需要写typename之前 std::list<...>::iterator ,因为 iterator是嵌套类型,您正在编写模板。

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

关于c++ - 模板 C++ 类声明中的类型/值不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/843247/

相关文章:

c++ - 在不同的 VBO 中存储不同的顶点属性

c++ - 我应该如何将 std::string 传递给函数?

java - Freemarker 循环似乎没有按顺序打印

c++ - 使用 C++ 将多个值插入 mysql 数据库表时出现问题

c# - 从托管代码调用非托管方法

c++ - 通用模板模板参数

c++ - 模板和继承过滤

java - Google App Engine 的模板引擎

c++ - 在 Eigen::Matrix::data() 上使用 std::move 将 Eigen::Matrix 转换为 vector

c++ - 完美转发等于什么