原文地址:http://blog.csdn.net/onlyou930/article/details/5602654

圆环套圆环之迭代器

话说这一日是风平浪静,万里乌云,俺的心情好的没得说,收到命令清理A区(写部分代码,其中有在VC6下己完成的代码要移植到VC7下),一路上很轻松,用‘饭得标’的话来说就是‘卡卡’地!在快完成时出现错误。

error C2440: “类型转换” : 无法从“std::vector<_Ty>::iterator”转换为“PPkgHead”
with
[
_Ty=BYTE
]

出错代码PPkgHead pHead = (PPkgHead )m_vPkgRecv.begin();

晕之,在VC6下可以编译通过的呀!看看为啥不让转换呢?看了一下返回值是std::vector::iterator 或是 std::vector::const_iterator , 在begin()后面加了一个点看到了iterator有下面还有一个iterator(果然是圆环套圆环)和加、减、[]等运算符操作,很是郁闷应该怎么转换呢?到vector里看了一下原来是一个类 class iterator 在里面看到了几个函数

const_reference operator*() const
{ // return designated object

return (*_Myptr);
}

const_iterator& operator++()
{ // preincrement
++_Myptr;
return (*this);
}

const_iterator& operator--()
{ // predecrement
--_Myptr;
return (*this);
}

看到这里激动无比呀,可以确定出_Myptr就是当前的指针!修改代码

std::vector::iterator p = m_vPkgRecv.begin();
PPkgHead pHead = (PPkgHead )p._Myptr;

编译通过,哈哈!一直不明白为啥VC7中在P后加点不显示这个成员!另外在网上找到另一个解决方案是PPkgHead pHead = (PPkgHead )&(*m_vPkgRecv.begin());这个强制转换真是强呀,哈哈!不知道兄弟们谁还有更好的方案!

写完程序后看了一下CryptoAPI提供的接口,无意中看到了一个函数CryptCreateHash,这是什么??继续找下去,我立该崩溃了,他他他….居然支持各种Hash运算,签名以及密钥生成!!看了一下它支持MD2,MD4,MD5,SHA,MAC,RSA,DSS,DES,3DES,RC2,RC4,SSL3,AES…..太多了,几乎包括了己知的各种算法!好大的一个棉花糖呀!如何应用这些API呢?!由于要介绍的太多了,我这里以点代面,以MD5算法为例,首先要获得指定CSP的密钥容器的句柄(没有容器的要自己建立),然后就可以用CryptCreateHash创建一个空哈希对象了,其次用CryptHashData对一块数据进行哈希,把它加到指定的哈希对象中,再次用CryptGetHashParam设置一个哈希对象的参数,一个MD5运算的过程就完成了,呵呵简单吧!下面是我写的一个关于MD5的例子,请大家多多指教!

C++ error C2440: “类型转换” : 无法从“std::vector::iterator”转换为“的更多相关文章

  1. error C2440:“类型转换":无法从“void (__thiscall Play1::* )(int *)”转换为“cocos2d::SEL_CallFucN

    转自:http://zhidao.baidu.com/link?url=VfSSkA0xfTVwNKaKh4tqW_sXlcsK-Rb16nEtQw5zaq5_306lnwJN3Kdb-rFp-r4L ...

  2. error C2440

    error C2440: "初始化": 无法从"std::_List_const_iterator<std::_List_val<std::_List_sim ...

  3. 模仿std::vector写线性表的几点感想

    数据结构还是很早之前学的了,当时才刚学过C语言,实现得都很简单,最近决定重新打牢基础,于是重新开始实现书上的数据结构和算法. 模仿C++ Primer的StrVec以及std::vector,使用模板 ...

  4. c++转载系列 std::vector模板库用法介绍

    来源:http://blog.csdn.net/phoebin/article/details/3864590 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作 ...

  5. C++ 中的std::vector介绍(转)

    vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vec ...

  6. error C2039: “bind2nd”: 不是“std”的成员

    VS2012 出现如下错误: error C2039: "bind2nd": 不是"std"的成员     头文件中加上 #include <functi ...

  7. std::vector介绍

    vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vec ...

  8. 孙鑫视频学习:改变窗口过程函数中出现error C2440错误的解决方法

    在Visual Studio 2010中,即使代码是完完全全按照孙鑫视频中的敲,也会在出现error C2440,这是因为开发平台由VC6.0升级至VS2010,需要将原有的项目迁移.VS2010对消 ...

  9. std::vector<Channel2*> m_allChannels;容器,以及如何根据channelid的意义

    std::vector<Channel2*> m_allChannels;容器,以及如何根据channelid的意义 这个容器保存了所有客户端连接的channel Channel2* Li ...

随机推荐

  1. Codeforces Round #426 (Div. 2) C. The Meaningless Game

    C. The Meaningless Game 题意: 两个人刚刚开始游戏的时候的分数, 都是一分, 然后随机一个人的分数扩大k倍,另一个扩大k的平方倍, 问给你一组最后得分,问能不能通过游戏得到这样 ...

  2. grpc python quickstart

    参考:grpc python quickstart 准备 1.升级pip $ python -m pip install --upgrade pip 2.安装grpc $ python -m pip ...

  3. 回顾:C++开篇课堂

    周三,在刚刚结束矩阵分析的考试之后,面向对象程序设计课正式开始了C++的学习,这次课的重点即是面向对象思想的理解. 梳理一下知识点. C++中函数的默认参数 在函数声明或者在函数定义时,对参数赋初始值 ...

  4. hdu 2874 Connections between cities 带权lca判是否联通

    Connections between cities Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  5. python 多线程队列

    ##Using Queue with multiprocessing – Chapter : Process Based Parallelism import multiprocessing impo ...

  6. python 删除元组元素

    #create a tuple tuplex = "w", "j" ,"c", "e" print(tuplex) #t ...

  7. shell 使用变量

    使用变量 使用一个定义过的变量,只要在变量名前面加美元符号即可,如: your_name="qinjx" echo $your_name echo ${your_name} 变量名 ...

  8. 字典重复key的合并

    from collections import defaultdict d=defaultdict(set) s=[("001","A"),("001 ...

  9. c++ primer plus 第二章 课后题答案

    #include<iostream> using namespace std; int main() { cout << "My name is Jiantong C ...

  10. Spring Boot入门第二天:一个基于Spring Boot的Web应用,使用了Spring Data JPA和Freemarker。

    原文链接 今天打算从数据库中取数据,并展示到视图中.不多说,先上图: 第一步:添加依赖.打开pom.xml文件,添加必要的依赖,完整代码如下: <?xml version="1.0&q ...