本文原创,转载请保证文章的完整性,并显要的注明出处。

本文链接:http://blog.csdn.net/wlsgzl/article/details/38843513

平时很少用STL,就算用,也基本是使用queue<int>之类的简单数据类型,偶尔在MFC里写点小代码,用的也是queue<CString>。

(求不要吐槽我为什么用CString不用string,在MFC里使用CString真的很方便,我对内存利用率和处理速度又没有什么要求,能跑就行,请勿吐槽。)

======================双宿双栖的分割线===========================

当这次我使用自定义的类时,出问题了。

作为一只工作在最底层的小猴子,兢兢业业,任劳任怨,写类代码的时候,不管有用没用,习惯上加上“拷贝构造函数”和“重载=”。

于是我正常的声明了

	std::queue<CDataRecv> m_queDataRecv;

然后随手一编译,输出了好多东西。(为了不泄露资料,我把相关路径使用了XXXXXXXXX代替)

c:\program files\microsoft visual studio 10.0\vc\include\xmemory(48): error C2558: class“CDataRecv”: 没有可用的复制构造函数或复制构造函数声明为“explicit”
1> c:\program files\microsoft visual studio 10.0\vc\include\xmemory(197): 参见对正在编译的函数 模板 实例化“void std::_Construct<CDataRecv,const _Ty&>(_Ty1 *,_Ty2)”的引用
1> with
1> [
1> _Ty=CDataRecv,
1> _Ty1=CDataRecv,
1> _Ty2=const CDataRecv &
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\xmemory(196): 编译类 模板 成员函数“void std::allocator<_Ty>::construct(CDataRecv *,const _Ty &)”时
1> with
1> [
1> _Ty=CDataRecv
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\deque(721): 参见对正在编译的类 模板 实例化“std::allocator<_Ty>”的引用
1> with
1> [
1> _Ty=CDataRecv
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\deque(773): 参见对正在编译的类 模板 实例化“std::_Deque_val<_Ty,_Alloc>”的引用
1> with
1> [
1> _Ty=CDataRecv,
1> _Alloc=std::allocator<CDataRecv>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\queue(22): 参见对正在编译的类 模板 实例化“std::deque<_Ty>”的引用
1> with
1> [
1> _Ty=CDataRecv
1> ]
1> d:\XXXXXXXXXXXXXXXXXXXXXXXXXXX\mscommwls.h(126): 参见对正在编译的类 模板 实例化“std::queue<_Ty>”的引用
1> with
1> [
1> _Ty=CDataRecv
1> ]

这里面有个很关键的问题,通常,当我看到下面的内容时,自然会查看自己的那一堆构造函数,看看是不是少写了一个。但是这次我确信我写了。

没有可用的复制构造函数或复制构造函数声明为“explicit”

于是接着往下看

void std::_Construct<CDataRecv,const _Ty&>(_Ty1 *,_Ty2)”的引用
1> with
1> [
1> _Ty=CDataRecv,
1> _Ty1=CDataRecv,
1> _Ty2=const CDataRecv &
1> ]

这个很重要,注意到了没有:

const _Ty&
<pre name="code" class="cpp">_Ty2=const CDataRecv &

STL出于“你懂得”目的,使用了const作限制,而我自定义类的拷贝构造函数恰好没有加const,问题找到了!

于是赶紧给拷贝构造函数加上const修饰,问题解决了。

现在想来,有时候,并不仅仅是防止修改的问题,当要使用其他现有工具时,应当符合该工具的要求/规范。

-------------------------------------------分割线?不,我是单身狗。-------------------------------------------

因为很少使用STL,所以能遇到这个问题我很是高兴,不仅仅是规范代码和代码规范。

问题解决——在STL的queue中使用自定义类的更多相关文章

  1. cocos2d-x 3.0 在lua中调用自定义类

    环境 windows8, cocos2d-x 3.0, 现在开始安装需要的一些其它包 1. 按README.mdown文档上面要求的, 下载在windows下要安装的东东, 主要就是python2.7 ...

  2. WebService中使用自定义类的解决方法(5种)

    转自:http://www.cnblogs.com/lxinxuan/archive/2007/05/24/758317.html Demo下载:http://files.cnblogs.com/lx ...

  3. Python中使用自定义类class作为海量数据结构时内存占用巨大的问题

    最近碰到处理一个二十多兆的文件时内存蹭蹭的吃掉四百多兆,吓死宝宝了. 无奈毕竟接触python时间有限,还没有完整的看过python的一些基础知识,我想一个合格的pythoner应该不会碰到这个问题. ...

  4. Java中使用自定义类封装数组,添加类方法实现数据操作

    1.具体见注释 2.后续或有更新 public class MyArray { private long[] array; private int cnt; // 自定义数组类的元素个数 /** 使用 ...

  5. YII中引用自定义类

    如果通过actions方法引用其他自定义类时 <?php class LoginController extends Controller { public function actionInd ...

  6. JNI:在线程或信号处理函数中访问自定义类

    在写一个Tomcat应用,类需要被信号处理函数回调,可是在单独的程序中测试没用问题: void OnSingalHandler(int sig) { ... JNIEnv* env=NULL; if ...

  7. python中使用自定义类实例作为字典的key

    python中dict类型的key值要求是不可变类型,通常来说,我们一般采用int或者str类型来作为字典的key,但是在某些场景中,会造成一定的麻烦. 如我们有一个处理http Request的规则 ...

  8. HashMap中使用自定义类作为Key时,为何要重写HashCode和Equals方法

    之前一直不是很理解为什么要重写HashCode和Equals方法,才只能作为键值存储在HashMap中.通过下文,可以一探究竟. 首先,如果我们直接用以下的Person类作为键,存入HashMap中, ...

  9. MFC中 自定义类访问主对话框控件的方法

    之前一直在找有木有好点的方法.现在终于被我找到,收藏之~~~~~~ 在使用mfc的时候经常遇到自定义类访问主对话框控件的问题,例如自定义类中的方法要输出一段字符串到主对话框的EDIT控件.控制对话框的 ...

随机推荐

  1. Orchard 异常

    在Orchard项目中碰的各种错误整理 1 打开网站出现404 . 查看日志 日志位置Orchard.Web\App_Data\Logs\orchard-error-2016.03.23.log 错误 ...

  2. easyui数据网格视图(Datagrid View)的简单应用

    下面介绍datagrid的数据网格详细视图和数据网格的分组视图 1.先引用的js和css文件 1)包含eauyui必备的四个文件easyui.css,icon.css, jquery-min.js.j ...

  3. ActiveReports 报表控件官方中文入门教程 (3)-如何选择页面报表和区域报表

    本篇文章将介绍区域报表和页面报表的常见使用场景.区别和选择报表类型的一些建议,两种报表的模板设计.数据源(设计时和运行时)设置.和浏览报表的区别. ActiveReports 报表控件官方中文入门教程 ...

  4. [moka同学笔记]百度编辑器Ueditor自动换行,添加<p>的问题(摘录)

     原文:http://www.cnblogs.com/kissdodog/p/5419919.html 百度编辑器Ueditor其实蛮好用的,后来使用了一段时间发现,每次打开后又保存,发现都会往内容的 ...

  5. python pip 升级每个包

    pip本身不自带升级所有包的功能, 但可以通过下面的脚本实现. import pip from subprocess import call for dist in pip.get_installed ...

  6. Ahjesus Nodejs01 环境搭建及运行

    访问http://nodejs.org/,根据系统选择下载文件,我用的win7 64 安装一路下一步直到完成 运行cmd输入node -v查看是否安装成功 成功会显示版本号 到此环境搭建完毕 ==== ...

  7. Linux里如何查找文件内容

    Linux查找文件内容的常用命令方法. 从文件内容查找匹配指定字符串的行: $ grep "被查找的字符串" 文件名例子:在当前目录里第一级文件夹中寻找包含指定字符串的.in文件g ...

  8. html5 大幅度地增加和改良input元素的种类

    增加和改良input元素 url类型.email类型.date类型.time类型.datetime类型.datetime-local类型.month类型.week类型.number类型.range类型 ...

  9. SharePoint 2013: Search Architecture in SPC202

    http://social.technet.microsoft.com/wiki/contents/articles/15989.sharepoint-2013-search-architecture ...

  10. android 内存泄露调试

    一.概述 1 二.Android(Java)中常见的容易引起内存泄漏的不良代码 1 (一) 查询数据库没有关闭游标 2 (二) 构造Adapter时,没有使用缓存的 convertView 3 (三) ...