错误1:

template<class T>
void temp(std::vector<T>& container)
{
        std::vector<T>::const_iterator p; //error: expected ‘;’ before ‘p’
        for(p = container.begin(); p != container.end(); ++p)
        {
                //...
        }
}

解决方法:

std::vector<T>::const_iterator p; //error: expected ‘;’ before ‘p’

typename std::vector<T>::const_iterator p;

原因:
 1、首先类除了可以定义数据成员或函数成员之外,还可以定义类型成员。
 2、使用std::vector<T>::const_iterator时,编译器假定这样的名字指定的是数据成员,而不是数据类型成员。
 3、如果希望编译器将const_iterator当做类型,则必须显示告诉编译器这样做,这就是我们加typename的原因。

错误2:typename const报错

template<typename T>
inline static bool Insert(std::list<T> & dest, const T & val)
{
    bool bDuplicate = false;
    typename std::list<T>::iterator iter = dest.begin();
    typename const std::list<T>::iterator end = dest.end();
    for ( ; end != iter; ++iter)
    {
        if(*iter >= val)
        {
            bDuplicate = (*iter == val);
            break;
        }
    }

if(!bDuplicate)
    {
        // 不重复则插入
        dest.insert(iter, val);
        return true;
    }

return false;
}

解决方法:

typename const std::list<T>::iterator end = dest.end();

const typename std::list<T>::iterator end = dest.end();

原因:

应该是typename后面接的下一个单词须是个类型名,而不应是const

更深入理解可以看nested dependent name(嵌套依赖名字)

本人以前的幼稚解决方法:

__gnu_cxx::__normal_iterator<T const*, std::vector<T, std::allocator<T> > > p;

c++ 模板参数做容器参数迭代器报错 vector<T>::const_iterator,typename const报错的更多相关文章

  1. stl中的容器、迭代器和算法----vector中的find实现

    来源 http://blog.csdn.net/huangyimin/article/details/6133650 stl包括容器.迭代器和算法: 容器 用于管理一些相关的数据类型.每种容器都有它的 ...

  2. C++杂谈(二)初识vector容器与迭代器

    教科书中失踪的vector 很奇怪的一件事情,在当时学习C++的时候,老师并没有讲授容器的内容,当时参考的谭浩强老师的红皮C++也没有这个内容,不知为何.后来再学C++,发现容器是一个很重要的概念,在 ...

  3. [原创]java WEB学习笔记109:Spring学习---spring对JDBC的支持:使用 JdbcTemplate 查询数据库,简化 JDBC 模板查询,在 JDBC 模板中使用具名参数两种实现

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. STL(标准模板库)理论基础,容器,迭代器,算法

    基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间.   ...

  5. 《深入实践C++模板编程》之五——容器与迭代器

    1.容器的定义 容器:专门用于某种形式组织及存储数据的类称为“容器”.   2.容器与迭代器 迭代器:封装了对容器虚拟数据序列的操作并按约定提供统一界面以遍历容器内容的代理类即为迭代器.   举例理解 ...

  6. C++基础--引用做函数参数

    引用,简单粗暴的解释叫做别名,简单粗暴的例子就是,我是熊叫大雄,但是很多时候别人不叫我熊叫大雄,会叫我大雄,粤语地区朋友爱叫我阿雄,有人叫我雄,所以,熊叫大雄这个变量的值是我,雄.大雄.阿雄是熊叫大雄 ...

  7. 做参数可以读取参数 保存参数 用xml文件的方式

    做参数可以读取参数 保存参数 用xml文件的方式 好处:供不同用户保存适合自己使用的参数

  8. 图说函数模板右值引用参数(T&&)类型推导规则(C++11)

    见下图: 规律总结: 只要我们传递一个基本类型是A④的左值,那么,传递后,T的类型就是A&,形参在函数体中的类型就是A&. 只要我们传递一个基本类型是A的右值,那么,传递后,T的类型就 ...

  9. C语言 数组做函数参数不传数组个数的遍历方法

    //数组做函数参数不传数组个数的遍历方法 #include<stdio.h> #include<stdlib.h> #include<string.h> void ...

随机推荐

  1. CUDA(5.5)与MySQL 5.6的rint函数定义冲突引起的VS编译器C2264错误

    向CUDA project中添加了如下的包含目录后: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include; ..\inclu ...

  2. 网络基础 HTTP协议之HTTP消息(HTTP Message)

    HTTP协议之HTTP消息(HTTP Message) by:授客 QQ:1033553122 1.   消息类型(Message Type) HTTP messages包含从客户端到服务器的请求和服 ...

  3. Oracle EBS AP 供应商API

    --创建供应商地址上的电话号码 created by jenrry 20170419 DECLARE l_return_status VARCHAR2(1); l_msg_count NUMBER; ...

  4. unittest 常用的断言方法

    1.assertEqual(self, first, second, msg=None) --判断两个参数相等:first == second 2.assertNotEqual(self, first ...

  5. centos7安装mysql5.7修改设置密码策略

    centos7操作系统在安装mysql5.7社区版之后会有默认密码,通过grep命令在mysqld.log文件中即可找到,如下所示: 标识位置即在初始化安装时mysql的默认密码,然后通过mysql ...

  6. 【gp数据库】你一定会用到的运维语句宝典

    -- 查询未空闲的进程信息 select * from pg_stat_activity where current_query<>'<IDLE>'; 结果可查看数据库名,进程 ...

  7. quarz时间配置

    Cron表达式的格式:秒 分 时 日 月 周 年(可选). 字段名                 允许的值                            允许的特殊字符     秒     ...

  8. 俄罗斯方块(JS+CSS)

    这是一个用 js + css 写的网页版俄罗斯方块. 具体代码与示例可访问我的另一个博客查看,源码与示例.

  9. November 12th, 2017 Week 46th Sunday

    I love you not for who you are, but for who I am with you. 我爱你不是因为你是谁,而是因为跟你在一起,我是谁. I enjoy the fee ...

  10. Priority Queue

    优先队列 集合性质的数据类型离不开插入删除这两操作,主要区别就在于删除的时候删哪个,像栈删最晚插入的,队列删最早插入的,随机队列就随便删,而优先队列删除当前集合里最大(或最小)的元素.优先队列有很多应 ...