﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Carrie--认清目标，坚持到底，永不放弃！-随笔分类-C++</title><link>http://www.cppblog.com/Carriexiaxia/category/8620.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 10 Jun 2011 14:10:03 GMT</lastBuildDate><pubDate>Fri, 10 Jun 2011 14:10:03 GMT</pubDate><ttl>60</ttl><item><title>创建和使用动态数组 </title><link>http://www.cppblog.com/Carriexiaxia/archive/2011/06/10/148470.html</link><dc:creator>Carrie</dc:creator><author>Carrie</author><pubDate>Fri, 10 Jun 2011 13:57:00 GMT</pubDate><guid>http://www.cppblog.com/Carriexiaxia/archive/2011/06/10/148470.html</guid><wfw:comment>http://www.cppblog.com/Carriexiaxia/comments/148470.html</wfw:comment><comments>http://www.cppblog.com/Carriexiaxia/archive/2011/06/10/148470.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Carriexiaxia/comments/commentRss/148470.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Carriexiaxia/services/trackbacks/148470.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 动态数组，顾名思义，就是可以动态分配长度的数组。在c语言中，数组的长度是固定的，而这种限制显然是很不灵活的。在c++中，数组有时候不用在编译时就知道长度，直到运行时才知道。与普通的数组变量不同，动态分配的数组将一直存在，直到程序显式的释放它为止。&nbsp;&nbsp;<a href='http://www.cppblog.com/Carriexiaxia/archive/2011/06/10/148470.html'>阅读全文</a><img src ="http://www.cppblog.com/Carriexiaxia/aggbug/148470.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Carriexiaxia/" target="_blank">Carrie</a> 2011-06-10 21:57 <a href="http://www.cppblog.com/Carriexiaxia/archive/2011/06/10/148470.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>fatal error LNK1120: 1 unresolved externals </title><link>http://www.cppblog.com/Carriexiaxia/archive/2011/05/24/147002.html</link><dc:creator>Carrie</dc:creator><author>Carrie</author><pubDate>Mon, 23 May 2011 16:29:00 GMT</pubDate><guid>http://www.cppblog.com/Carriexiaxia/archive/2011/05/24/147002.html</guid><wfw:comment>http://www.cppblog.com/Carriexiaxia/comments/147002.html</wfw:comment><comments>http://www.cppblog.com/Carriexiaxia/archive/2011/05/24/147002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Carriexiaxia/comments/commentRss/147002.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Carriexiaxia/services/trackbacks/147002.html</trackback:ping><description><![CDATA[<div>错误 LNK1120 为您提供该链接的无法解析的外部对象数 (number)。导致无法解析的外部对象的条件由错误 LNK2001 描述，此错误出现在该错误信息之前（对每个无法解析的外部对象都出现一次）。 //就是说每出现一次LNK1120都会在之前出现一个LNK2001 所以主要是解决LNK1120关键是要解决链接器工具错误 LNK2001 这分一下的情况（来自VS 2008的帮助），在这里我只复制一些比较常见的，如果还不行，你重建工程来吧~~ </div>
<div>&nbsp;</div>
<div>一、代码问题 </div>
<div>1.如果 LNK2001 诊断文本报告 __check_commonlanguageruntime_version 是无法解析的外部符号，在 function 中找到了未定义的外部符号 (symbol)。若要解决此错误，请提供符号定义或移除引用它的代码。 </div>
<div>2.成员模板的定义超出了类的范围。Visual C++ 的一个限制是，成员模板的定义必须完全位于封闭类内。 </div>
<div>3.代码中大小写不匹配 </div>
<div>4.如果项目使用函数内联，但在 .cpp 文件而非头文件中定义函数，则会导致 LNK2001。 </div>
<div>5.试图引用没有外部链接的函数或数据会导致 LNK2001。 </div>
<div>6.缺少函数主体或变量会导致 LNK2001。 </div>
<div>7.调用参数类型与函数声明中的参数类型不匹配的函数会导致 LNK2001。名称修饰将函数参数合并到最终修饰函数名中。 </div>
<div>8.错误包含的原型导致编译器需要没有提供的函数体，这样会导致 LNK2001。如果同时具有函数 F 的类实现和非类实现，请注意 C++ 范围解析规则。 </div>
<div>9.在使用 C++ 时，将函数原型包含在类定义中但未能包含实现（该类的此函数的实现）会导致 LNK2001。 </div>
<div>10.试图从抽象基类的构造函数或析构函数调用纯虚函数会导致 LNK2001。纯虚函数没有基类实现。 </div>
<div>11.试图在函数范围外使用用该函数声明的变量（局部变量）会导致 LNK2001。</div>
<div>&nbsp;</div>
<div>二、编译和链接问题 </div>
<div>1.项目缺少对库 (.LIB) 或对象 (.OBJ) 文件的引用。有关更多信息，请参见用作链接器输入的 .lib 文件。 </div>
<div>2.如果使用 /NODEFAULTLIB 或 /Zl，包含所需代码的库将不会链接到项目，除非已显式地包括了这些库。（在使用 /clr 或 /clr:pure 进行编译时，您将看到对 .cctor 的引用；有关更多信息，请参见 混合程序集的初始化。） </div>
<div>3.如果正在使用 Unicode 和 MFC，如果没有创建 wWinMainCRTStartup 的入口点，将在 _WinMain@16 上得到无法解析的外部对象；请使用 /ENTRY。请参见 Unicode 编程摘要。 </div>
<div>4.将用 /MT 编译的代码与库 LIBC.lib 链接会在 _beginthread、_beginthreadex、_endthread 和 _endthreadex 上导致 LNK2001。 </div>
<div>5.链接需要多线程库的代码（任何 MFC 代码或用 /MT 编译的代码）会在 _beginthread、_beginthreadex、_endthread 和 _endthreadex 上导致 LNK2001。有关更多信息，请参见下列知识库文章： </div>
<div>6.在用 /MD 进行编译时，因为所有的运行时现在都存放在一个 DLL 中，所以源中的&#8220;func&#8221;引用在对象中变为&#8220;__imp__func&#8221;引用。如果试图与 LIBC.lib 或 LIBCMT.lib 静态库链接，则将在 __imp__func 上得到 LNK2001。当不用 /MD 进行编译时，如果试图与 MSVCxx.lib 链接，则并非总是得到 LNK2001，但可能会有其他问题。 </div>
<div>7.在生成应用程序的调试版本时与发布模式库链接会导致 LNK2001。同样，使用 /Mxd 选项（/MTd 或 /MDd）和/或定义 _DEBUG，然后再与版本库链接，将可能会产生无法解析的外部对象（同时还会出现其他问题）。将发布模式生成与调试库链接同样会导致类似问题。 </div>
<div>8.将 Microsoft 库版本和编译器产品版本混合可能会有问题。新编译器版本的库可能包含早期版本的库中没有的新符号。可能需要更改搜索路径中的目录顺序，或将它们更改为指向当前版本。 </div>
<div>9.使用库文件选择下的&#8220;工具&#8221;|&#8220;选项&#8221;|&#8220;项目&#8221;|&#8220;VC++ 目录&#8221;对话框，可以更改搜索顺序。项目的&#8220;属性页&#8221;对话框中的&#8220;链接器&#8221;文件夹可能也包含可能已过期的路径。 </div>
<div>10.当安装了新的 SDK（可能在不同的位置），但没有将搜索顺序更新为指向新位置时，可能会出现此问题。通常情况下，应将新 SDK 的 include 目录和 lib 目录的路径放在默认 Visual C++ 位置的前面。另外，包含嵌入路径的项目可能仍然指向旧路径，这些路径是有效的，但对于安装到不同位置的新版本所添加的新功能已过期。 </div>
<div>11.编译器供应商之间、甚至同一编译器的不同版本之间当前没有 C++ 命名标准。因此，链接用其他编译器编译的对象文件可能无法生成相同的命名方案，从而导致错误 LNK2001。 </div>
<div>12.在不同模块上混合内联和非内联编译选项会导致 LNK2001。如果创建 C++ 库时打开了函数内联（/Ob1 或 /Ob2），但描述函数的相应头文件的内联是关闭的（没有 inline 关键字），则将发生此错误。若要防止此问题，请在要包含到其他文件中的头文件中用 inline 定义内联函数。 </div>
<div>13.如果使用 #pragma inline_depth 编译器指令，请确保具有 设置为 2 或更大的值，并确保使用 /Ob1 或 /Ob2 编译器选项。 </div>
<div>14.在创建纯资源 DLL 时省略 LINK 选项 /NOENTRY 将导致 LNK2001。 </div>
<div>15.使用不正确的 /SUBSYSTEM 或 /ENTRY 设置会导致 LNK2001。例如，如果编写基于字符的应用程序（控制台应用程序）并指定 /SUBSYSTEM:WINDOWS，您将得到无法解析的 WinMain 外部对象。有关这些选项和入口点的更多信息，请参见 /SUBSYSTEM 和 /ENTRY 链接器选项。</div><img src ="http://www.cppblog.com/Carriexiaxia/aggbug/147002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Carriexiaxia/" target="_blank">Carrie</a> 2011-05-24 00:29 <a href="http://www.cppblog.com/Carriexiaxia/archive/2011/05/24/147002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC 遇到的Link2001错误的原因</title><link>http://www.cppblog.com/Carriexiaxia/archive/2011/05/22/146924.html</link><dc:creator>Carrie</dc:creator><author>Carrie</author><pubDate>Sun, 22 May 2011 06:06:00 GMT</pubDate><guid>http://www.cppblog.com/Carriexiaxia/archive/2011/05/22/146924.html</guid><wfw:comment>http://www.cppblog.com/Carriexiaxia/comments/146924.html</wfw:comment><comments>http://www.cppblog.com/Carriexiaxia/archive/2011/05/22/146924.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Carriexiaxia/comments/commentRss/146924.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Carriexiaxia/services/trackbacks/146924.html</trackback:ping><description><![CDATA[<span style="text-align: center; widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 22px; font-family: Arial, Helvetica, simsun, u5b8bu4f53; font-size: 14px" class="Apple-style-span"><font style="line-height: 22px" color="#6600ff">学习</font>VC＋＋时经常会遇到链接错误LNK2001，该错误非常讨厌，因为对于 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 编程者来说，最好改的错误莫过于编译错误，而一般说来发生连接错误时， &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 编译都已通过。产生连接错误的原因非常多，尤其LNK2001错误，常常使人不 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 明其所以然。如果不深入地学习和理解VC＋＋，要想改正连接错误LNK2001非 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 常困难。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" /><clk style="line-height: 22px">&nbsp; 　　初学者在学习VC＋＋的学习过程中，遇到的LNK2001错误的错误消息主要为： &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　unresolved &nbsp; external &nbsp; symbol &nbsp; &#8220;symbol&#8221;（不确定的外部&#8220;符号&#8221;）。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" /><clk style="line-height: 22px">&nbsp; 标签，将产生此错误的消息,一般来说，发生错误的原因有两个：一是所引用 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" /><font style="line-height: 22px" color="#000000">&nbsp; 的函数、变量不存在、拼写不正确或者使用错误；其次可能使用了不同版本 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 的连接库。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　以下是可能产生LNK2001错误的原因： &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　一．由于编码错误导致的LNK2001。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" /><clk style="line-height: 22px">&nbsp; 　　1．不相匹配的</clk></font><nobr style="background-image: url(http://control.clickeye.com.cn/images/line5.gif); padding-bottom: 2px; line-height: 22px; background-repeat: repeat-x; background-position: 50% 100%; color: rgb(102,0,255); -webkit-background-clip: initial; -webkit-background-origin: initial"  false;?="" this);?="" kwc(event,6)?="" target="_blank"><font style="line-height: 22px" color="#000000">程序代码或模块定义(.DEF)文件能导致LNK2001。例如, &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 如果在C＋＋ &nbsp; 源文件内声明了一变量&#8220;var1&#8221;，却试图在另一文件内以变量 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; &#8220;VAR1&#8221;访问该变量,将发生该错误。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　2．如果使用的内联函数是在.CPP文件内定义的，而不是在头文件内定 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 义将导致LNK2001错误。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　3．调用函数时如果所用的参数类型同函数声明时的类型不符将会产生 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; LNK2001。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　4．试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　5．要注意函数和变量的可公用性，只有全局变量、函数是可公用的。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　静态函数和静态变量具有相同的使用范围限制。当试图从文件外部访问 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　函数内声明的变量(局部变量) &nbsp; 只能在该函数的范围内使用。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　C＋＋ &nbsp; 的全局常量只有静态连接性能。这不同于C，如果试图在C＋＋的 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 多个文件内使用全局变量也会产生LNK2001错误。一种解决的方法是需要时在 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 头文件中加入该常量的初始化代码，并在.CPP文件中包含该头文件；另一种 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 方法是使用时给该变量赋以常数。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　二．由于编译和链接的设置而造成的LNK2001 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　1．如果编译时使用的是/NOD(/NODEFAULTLIB)选项，程序所需要的运行 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" /><clk style="line-height: 22px">&nbsp; 库和MFC库在连接时由编译器写入</clk></font></nobr><nobr style="background-image: url(http://control.clickeye.com.cn/images/line5.gif); padding-bottom: 2px; line-height: 22px; background-repeat: repeat-x; background-position: 50% 100%; color: rgb(102,0,255); -webkit-background-clip: initial; -webkit-background-origin: initial"  false;?="" this);?="" target="_blank"  kwc(event,7)?=""><font style="line-height: 22px" color="#000000">目标文件模块， &nbsp; 但除非在文件中明确包含 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 这些库名，否则这些库不会被链接进工程文件。在这种情况下使用/NOD将导 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 致错误LNK2001。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　2．如果没有为wWinMainCRTStartup设定程序入口，在使用Unicode和MFC &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 时将得到&#8220;unresolved &nbsp; external &nbsp; on &nbsp; _WinMain@16&#8221;的LNK2001错误信息。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　3．使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内， &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 源文件中对&#8220;func&#8221;的引用，在目标文件里即对&#8220;__imp__func&#8221; &nbsp; 的引用。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 如果试图使用静态库LIBC.LIB或LIBCMT.LIB进行连接，将在__imp__func上发 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 生LNK2001；如果不使用/MD选项编译，在使用MSVCxx.LIB连接时也会发生LNK2001。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　4．使用/ML选项编译时，如用LIBCMT.LIB链接会在_errno上发生LNK2001。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　5．当编译调试版的应用程序时，如果采用发行版模态库进行连接也会产 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 生LNK2001；同样，使用调试版模态库连接发行版应用程序时也会产生相同的 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 问题。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　6．不同版本的库和编译器的混合使用也能产生问题，因为新版的库里可 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" /><clk style="line-height: 22px">&nbsp; 能包含早先的版本没有的符号和</clk></font></nobr><nobr style="background-image: url(http://control.clickeye.com.cn/images/line5.gif); padding-bottom: 2px; line-height: 22px; background-repeat: repeat-x; background-position: 50% 100%; color: rgb(102,0,255); -webkit-background-clip: initial; -webkit-background-origin: initial"  false;?="" this);?="" target="_blank"  kwc(event,2)?=""><font style="line-height: 22px" color="#000000">说明。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　7．在不同的模块使用内联和非内联的编译选项能够导致LNK2001。如果 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 创建C＋＋库时打开了函数内联（/Ob1或/Ob2)，但是在描述该函数的相应头 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 文件里却关闭了函数内联（没有inline关键字），这时将得到该错误信息。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 为避免该问题的发生，应该在相应的头文件中用inline关键字标志内联函数。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　8．不正确的/SUBSYSTEM或/ENTRY设置也能导致LNK2001。 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 　　其实，产生LNK2001的原因还有很多，以上的原因只是一部分而已，对初 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" /><clk style="line-height: 22px">&nbsp; 学者来说这些就够理解一阵子了。但是，</clk></font></nobr><nobr style="background-image: url(http://control.clickeye.com.cn/images/line5.gif); padding-bottom: 2px; line-height: 22px; background-repeat: repeat-x; background-position: 50% 100%; color: rgb(102,0,255); -webkit-background-clip: initial; -webkit-background-origin: initial"  false;?="" this);?="" target="_blank"  kwc(event,11)?=""><font style="line-height: 22px" color="#000000">分析错误原因的目的是为了避免错 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 误的发生。LNK2001错误虽然比较困难，但是只要注意到了上述问题，还是能 &nbsp;<span class="Apple-converted-space">&nbsp;</span><br style="line-height: 22px" />&nbsp; 够避免和予以解决的。　　</font>&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span></nobr></clk></clk></span></span><img src ="http://www.cppblog.com/Carriexiaxia/aggbug/146924.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Carriexiaxia/" target="_blank">Carrie</a> 2011-05-22 14:06 <a href="http://www.cppblog.com/Carriexiaxia/archive/2011/05/22/146924.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++经典错误之already defined in *****.obj解决方法 </title><link>http://www.cppblog.com/Carriexiaxia/archive/2011/05/22/146923.html</link><dc:creator>Carrie</dc:creator><author>Carrie</author><pubDate>Sun, 22 May 2011 05:57:00 GMT</pubDate><guid>http://www.cppblog.com/Carriexiaxia/archive/2011/05/22/146923.html</guid><wfw:comment>http://www.cppblog.com/Carriexiaxia/comments/146923.html</wfw:comment><comments>http://www.cppblog.com/Carriexiaxia/archive/2011/05/22/146923.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Carriexiaxia/comments/commentRss/146923.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Carriexiaxia/services/trackbacks/146923.html</trackback:ping><description><![CDATA[<div class="tit">&nbsp;</div>
<div style="margin-bottom: 5px; border-top: #bddaf2 1px solid"></div>
<div id="blog_text" class="cnt">
<p>我的程序是如下形状：<font color="#ff0000">一个头文件.h，一个主函数.cpp，一个操作函数.cpp。操作函数包含头文件，然后主函数包含操作函数.cpp</font>。运行时出现错误：</p>
<p>错误症状：</p>
<p><strong>Linking...<br />xz.obj : error LNK2005: "public: __thiscall XZ::XZ(void)" (</strong><strong>??0XZ@@QAE@XZ</strong><strong>) already defined in xzmain.obj<br />xz.obj : error LNK2005: "public: void __thiscall XZ::pdc(void)" (</strong><strong>?pdc@XZ@@QAEXXZ</strong><strong>) already defined in xzmain.obj<br />xz.obj : error LNK2005: "public: void __thiscall XZ::pcd(void)" (</strong><strong>?pcd@XZ@@QAEXXZ</strong><strong>) already defined in xzmain.obj<br />xz.obj : error LNK2005: "public: void __thiscall XZ::pzf(void)" (</strong><strong>?pzf@XZ@@QAEXXZ</strong><strong>) already defined in xzmain.obj<br />xz.obj : error LNK2005: "public: __thiscall XZ::~XZ(void)" (</strong><strong>??1XZ@@QAE@XZ</strong><strong>) already defined in xzmain.obj<br />Debug/xzmain.exe : fatal error LNK1169: one or more multiply defined symbols found<br />执行 link.exe 时出错.</strong></p>
<p>解决方案一：</p>
<p>把主函数所包含的操作函数.cpp，改为头文件.h，然后就可以解决如上错误。</p>
<p>解决方案二：</p>
<p>重新打开编译器，重新打开刚才的文件，先打开主函数.cpp，然后编译运行，打开Fileview，其中有一个external dependencies，把头文件.h，和操作函数.cpp添加到这里，这样再编译运行主函数.cpp，程序运行成功！</p></div><img src ="http://www.cppblog.com/Carriexiaxia/aggbug/146923.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Carriexiaxia/" target="_blank">Carrie</a> 2011-05-22 13:57 <a href="http://www.cppblog.com/Carriexiaxia/archive/2011/05/22/146923.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>回调函数和函数指针</title><link>http://www.cppblog.com/Carriexiaxia/archive/2011/03/28/142890.html</link><dc:creator>Carrie</dc:creator><author>Carrie</author><pubDate>Mon, 28 Mar 2011 13:11:00 GMT</pubDate><guid>http://www.cppblog.com/Carriexiaxia/archive/2011/03/28/142890.html</guid><wfw:comment>http://www.cppblog.com/Carriexiaxia/comments/142890.html</wfw:comment><comments>http://www.cppblog.com/Carriexiaxia/archive/2011/03/28/142890.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Carriexiaxia/comments/commentRss/142890.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Carriexiaxia/services/trackbacks/142890.html</trackback:ping><description><![CDATA[<p><span>最近在看代码，写代码的人很喜欢用回调函数和函数指针。一直觉得回调函数和函数指针挺神秘的，所以查了一些资料，来与大家一起来分享。</span></p>
<p><strong><span>什么是回调函数</span></strong><strong></strong></p>
<p><span>简而言之，回调函数就是一个通过函数指针调用的函数。如果你把函数的指针（地址）作为参数传递给另一个函数，当这个指针被用为调用它所指向的函数时，我们就说这是回调函数。</span></p>
<p><strong><span>为什么要使用回调函数</span></strong></p>
<p><span><span>&nbsp;&nbsp; </span></span><span>因为使用回调函数可以把调用者和被调用者分开，调用者不关心谁是被调用者，所有它需知道的，只是存在一个具有某种特定原型、某些限制条件（如返回值为</span><span>int</span><span>）的被调用函数。回调函数就好像是一个中断处理函数，系统在符合你设定的条件时自动调用。</span></p>
<p align=left><strong><span>如何使用回调函数</span></strong><strong></strong></p>
<p><span>&nbsp;</span><span>使用回调函数，我们需要做三件事：</span></p>
<ul>
    <li><span>声明</span>
    <li><span>定义</span>
    <li><span></span><span>设置触发条件：在你的函数种把你的回调函数名称转化为地址作为一个参数，以便于系统调用。</span> </li>
</ul>
<p><span>声明和定义时应注意，回调函数由系统调用，所以可以认为它属于</span><span>windows</span><span>系统，不要把它当作你的某个类的成员函数。</span></p>
<p align=left><span>回调函数是一个程序员不能显示调用的函数，通过将回调函数的地址传给调用者从而实现调用。回调函数是十分必要的，在我们想通过一个统一接口实现不同的内容，这时回调函数非常合适。</span></p>
<p align=left><strong><span>函数指针的声明</span></strong><strong></strong></p>
<p align=left><span>对回调函数有了一个初步的了解，下面我们来说一下函数指针。因为要实现回调，必须首先定义函数指针。</span></p>
<p align=left><span>void (*) ()</span></p>
<p align=left><span>左边圆括弧中的星号是函数指针声明的关键。另外两个元素是函数的返回类型（</span><span>void</span><span>）和右边圆括弧中的入口参数</span></p>
<p align=left><span>为函数指针声明类型定义：</span></p>
<p align=left><span>Typedef void(* pfv)()</span></p>
<p align=left><span>pfv </span><span>是一个函数指针，它指向的函数没有输入参数，返回类型为</span><span>voie</span><span>。使用这个类型定义名称可以隐藏负责的函数指针语法。</span></p>
<p align=left><span>void (*p)();</span></p>
<p align=left><span>void&nbsp;func()</span></p>
<p align=left><span>{</span></p>
<p align=left><span>&#8230;&#8230;</span></p>
<p align=left><span>}</span></p>
<p align=left><span>p = func;</span></p>
<p align=left><span>p</span><span>的赋值可以不同，但一定要是函数的指针，并且参数和返回类型相同。</span></p>
<p align=left><span>例如：</span></p>
<p align=left><span>现学现卖的一个小例子<br></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">typedef&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">PF)();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;func()<br><img id=Codehighlighter1_76_104_Open_Image onclick="this.style.display='none'; Codehighlighter1_76_104_Open_Text.style.display='none'; Codehighlighter1_76_104_Closed_Image.style.display='inline'; Codehighlighter1_76_104_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_76_104_Closed_Image onclick="this.style.display='none'; Codehighlighter1_76_104_Closed_Text.style.display='none'; Codehighlighter1_76_104_Open_Image.style.display='inline'; Codehighlighter1_76_104_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_76_104_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_76_104_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">func</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;caller(&nbsp;PF&nbsp;pf)<br><img id=Codehighlighter1_127_137_Open_Image onclick="this.style.display='none'; Codehighlighter1_127_137_Open_Text.style.display='none'; Codehighlighter1_127_137_Closed_Image.style.display='inline'; Codehighlighter1_127_137_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_127_137_Closed_Image onclick="this.style.display='none'; Codehighlighter1_127_137_Closed_Text.style.display='none'; Codehighlighter1_127_137_Open_Image.style.display='inline'; Codehighlighter1_127_137_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_127_137_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_127_137_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;pf();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_151_214_Open_Image onclick="this.style.display='none'; Codehighlighter1_151_214_Open_Text.style.display='none'; Codehighlighter1_151_214_Closed_Image.style.display='inline'; Codehighlighter1_151_214_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_151_214_Closed_Image onclick="this.style.display='none'; Codehighlighter1_151_214_Closed_Text.style.display='none'; Codehighlighter1_151_214_Open_Image.style.display='inline'; Codehighlighter1_151_214_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_151_214_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_151_214_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;PF&nbsp;p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;func;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;caller(p);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span></div>
<p align=left><br></span></p>
<p align=left><strong><span>调用约定</span></strong><strong></strong></p>
<p align=left><span>在<span>visual c++</span>中，可以在函数类型前加<span>_cdecl,_stdcall</span>或者<span>_pascal</span>来表示调用规范（默认为<span>_cdecl</span>）。调用规范影响编译器产生的给定函数名，参数传递的顺序，堆栈清理责任以及参数传递机制。</span></p>
<p align=left><span>不过，在<span>win32</span>的程序中，我见得比较多的是<span>CALLBACK</span>，这个宏定义在<span>windef.h</span>中，</span></p>
<p align=left><strong><span>#define CALLBACK<span>&nbsp;&nbsp;&nbsp; </span>__stdcall</span></strong></p>
<p align=left><span>它约定了函数在它们返回到调用者之前，都会从堆栈中移除掉参数。</span></p>
<img src ="http://www.cppblog.com/Carriexiaxia/aggbug/142890.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Carriexiaxia/" target="_blank">Carrie</a> 2011-03-28 21:11 <a href="http://www.cppblog.com/Carriexiaxia/archive/2011/03/28/142890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>define的用法</title><link>http://www.cppblog.com/Carriexiaxia/archive/2008/11/05/66064.html</link><dc:creator>Carrie</dc:creator><author>Carrie</author><pubDate>Wed, 05 Nov 2008 14:53:00 GMT</pubDate><guid>http://www.cppblog.com/Carriexiaxia/archive/2008/11/05/66064.html</guid><wfw:comment>http://www.cppblog.com/Carriexiaxia/comments/66064.html</wfw:comment><comments>http://www.cppblog.com/Carriexiaxia/archive/2008/11/05/66064.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Carriexiaxia/comments/commentRss/66064.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Carriexiaxia/services/trackbacks/66064.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天整理了一些#define的用法，与大家共享！<br>1.简单的define定义<br><br>#define MAXTIME 1000 <br><br>一个简单的MAXTIME就定义好了，它代表1000，如果在程序里面写<br><br>if(i<MAXTIME){.........}<br><br>编译器在处理这个代码之前会对MAXTIME进行处理替换为1000。<br><br>这样的定义看起来类似于普通的常量定义CONST，但也有着不同，因为define的定义更像是简单的文本替换，而不是作为一个量来使用，这个问题在下面反映的尤为突出。&nbsp;&nbsp;<a href='http://www.cppblog.com/Carriexiaxia/archive/2008/11/05/66064.html'>阅读全文</a><img src ="http://www.cppblog.com/Carriexiaxia/aggbug/66064.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Carriexiaxia/" target="_blank">Carrie</a> 2008-11-05 22:53 <a href="http://www.cppblog.com/Carriexiaxia/archive/2008/11/05/66064.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入C++的new</title><link>http://www.cppblog.com/Carriexiaxia/archive/2008/11/05/66016.html</link><dc:creator>Carrie</dc:creator><author>Carrie</author><pubDate>Wed, 05 Nov 2008 05:52:00 GMT</pubDate><guid>http://www.cppblog.com/Carriexiaxia/archive/2008/11/05/66016.html</guid><wfw:comment>http://www.cppblog.com/Carriexiaxia/comments/66016.html</wfw:comment><comments>http://www.cppblog.com/Carriexiaxia/archive/2008/11/05/66016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Carriexiaxia/comments/commentRss/66016.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Carriexiaxia/services/trackbacks/66016.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: “new”是C++的一个关键字，同时也是操作符。关于new的话题非常多，因为它确实比较复杂，也非常神秘，下面我将把我了解到的与new有关的内容做一个总结。&nbsp;&nbsp;<a href='http://www.cppblog.com/Carriexiaxia/archive/2008/11/05/66016.html'>阅读全文</a><img src ="http://www.cppblog.com/Carriexiaxia/aggbug/66016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Carriexiaxia/" target="_blank">Carrie</a> 2008-11-05 13:52 <a href="http://www.cppblog.com/Carriexiaxia/archive/2008/11/05/66016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>指针的引用与正常指针 释放内存的另一例比较</title><link>http://www.cppblog.com/Carriexiaxia/archive/2008/11/04/65940.html</link><dc:creator>Carrie</dc:creator><author>Carrie</author><pubDate>Tue, 04 Nov 2008 08:17:00 GMT</pubDate><guid>http://www.cppblog.com/Carriexiaxia/archive/2008/11/04/65940.html</guid><wfw:comment>http://www.cppblog.com/Carriexiaxia/comments/65940.html</wfw:comment><comments>http://www.cppblog.com/Carriexiaxia/archive/2008/11/04/65940.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Carriexiaxia/comments/commentRss/65940.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Carriexiaxia/services/trackbacks/65940.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 指针的引用与正常指针 释放内存的另一例比较&nbsp;&nbsp;<a href='http://www.cppblog.com/Carriexiaxia/archive/2008/11/04/65940.html'>阅读全文</a><img src ="http://www.cppblog.com/Carriexiaxia/aggbug/65940.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Carriexiaxia/" target="_blank">Carrie</a> 2008-11-04 16:17 <a href="http://www.cppblog.com/Carriexiaxia/archive/2008/11/04/65940.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>More Effective C++：指针与引用的区别</title><link>http://www.cppblog.com/Carriexiaxia/archive/2008/11/04/65936.html</link><dc:creator>Carrie</dc:creator><author>Carrie</author><pubDate>Tue, 04 Nov 2008 07:44:00 GMT</pubDate><guid>http://www.cppblog.com/Carriexiaxia/archive/2008/11/04/65936.html</guid><wfw:comment>http://www.cppblog.com/Carriexiaxia/comments/65936.html</wfw:comment><comments>http://www.cppblog.com/Carriexiaxia/archive/2008/11/04/65936.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Carriexiaxia/comments/commentRss/65936.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Carriexiaxia/services/trackbacks/65936.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 指针与引用看上去完全不同（指针用操作符’*’和’->’，引用使用操作符’.’），但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针，在什么时候使用引用呢？&nbsp;&nbsp;<a href='http://www.cppblog.com/Carriexiaxia/archive/2008/11/04/65936.html'>阅读全文</a><img src ="http://www.cppblog.com/Carriexiaxia/aggbug/65936.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Carriexiaxia/" target="_blank">Carrie</a> 2008-11-04 15:44 <a href="http://www.cppblog.com/Carriexiaxia/archive/2008/11/04/65936.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>stl容器学习总结</title><link>http://www.cppblog.com/Carriexiaxia/archive/2008/10/31/65640.html</link><dc:creator>Carrie</dc:creator><author>Carrie</author><pubDate>Fri, 31 Oct 2008 12:22:00 GMT</pubDate><guid>http://www.cppblog.com/Carriexiaxia/archive/2008/10/31/65640.html</guid><wfw:comment>http://www.cppblog.com/Carriexiaxia/comments/65640.html</wfw:comment><comments>http://www.cppblog.com/Carriexiaxia/archive/2008/10/31/65640.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Carriexiaxia/comments/commentRss/65640.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Carriexiaxia/services/trackbacks/65640.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一 迭代器（iterator）<br>迭代器：<br>迭代器是类似指针的对象，STL算法利用它们对存储在容器中的对象序列进行遍历。<br>5种类别：1、输入迭代器    <br>         2、输出迭代器    <br>         3、前向迭代器    <br>         4、双向迭代器    <br>         5、随机访问迭代器  &nbsp;&nbsp;<a href='http://www.cppblog.com/Carriexiaxia/archive/2008/10/31/65640.html'>阅读全文</a><img src ="http://www.cppblog.com/Carriexiaxia/aggbug/65640.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Carriexiaxia/" target="_blank">Carrie</a> 2008-10-31 20:22 <a href="http://www.cppblog.com/Carriexiaxia/archive/2008/10/31/65640.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>    三十分钟掌握STL--作者Blog：http://blog.csdn.net/kary/</title><link>http://www.cppblog.com/Carriexiaxia/archive/2008/10/30/65582.html</link><dc:creator>Carrie</dc:creator><author>Carrie</author><pubDate>Thu, 30 Oct 2008 13:51:00 GMT</pubDate><guid>http://www.cppblog.com/Carriexiaxia/archive/2008/10/30/65582.html</guid><wfw:comment>http://www.cppblog.com/Carriexiaxia/comments/65582.html</wfw:comment><comments>http://www.cppblog.com/Carriexiaxia/archive/2008/10/30/65582.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Carriexiaxia/comments/commentRss/65582.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Carriexiaxia/services/trackbacks/65582.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: STL概述<br>STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念，但这种分离确实使得STL变得非常通用。例如，由于STL的sort()函数是完全通用的，你可以用它来操作几乎任何数据集合，包括链表，容器和数组。<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/Carriexiaxia/archive/2008/10/30/65582.html'>阅读全文</a><img src ="http://www.cppblog.com/Carriexiaxia/aggbug/65582.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Carriexiaxia/" target="_blank">Carrie</a> 2008-10-30 21:51 <a href="http://www.cppblog.com/Carriexiaxia/archive/2008/10/30/65582.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++常见问题</title><link>http://www.cppblog.com/Carriexiaxia/archive/2008/10/30/65551.html</link><dc:creator>Carrie</dc:creator><author>Carrie</author><pubDate>Thu, 30 Oct 2008 04:40:00 GMT</pubDate><guid>http://www.cppblog.com/Carriexiaxia/archive/2008/10/30/65551.html</guid><wfw:comment>http://www.cppblog.com/Carriexiaxia/comments/65551.html</wfw:comment><comments>http://www.cppblog.com/Carriexiaxia/archive/2008/10/30/65551.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Carriexiaxia/comments/commentRss/65551.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Carriexiaxia/services/trackbacks/65551.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 构造函数不能声明为虚函数的原因是: <br>解释一：所谓虚函数就是多态情况下只执行一个,而从继承的概念来讲,总是要先构造父类对象,然后才能是子类对象,如果构造函数设为虚函数,那么当你在构造父类的构造函数时就不得不显示的调用构造,还有一个原因就是为了防错,试想如果你在子类中一不小心重写了个跟父类构造函数一样的函数,那么你的父类的构造函数将被覆盖,也即不能完成父类的构造.就会出错. <br><br>解释二：虚函数的主要意义在于被派生类继承从而产生多态. 派生类的构造函数中, 编译器会加入构造基类的代码, 如果基类的构造函数用到参数, 则派生类在其构造函数的初始化列表中必须为基类给出参数, 就是这个原因. <br>析构函数设为虚函数的作用: <br>解释：在类的继承中,如果有基类指针指向派生类，那么用基类指针delete时，如果不定义成虚函数，派生类中派生的那部分无法析构。&nbsp;&nbsp;<a href='http://www.cppblog.com/Carriexiaxia/archive/2008/10/30/65551.html'>阅读全文</a><img src ="http://www.cppblog.com/Carriexiaxia/aggbug/65551.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Carriexiaxia/" target="_blank">Carrie</a> 2008-10-30 12:40 <a href="http://www.cppblog.com/Carriexiaxia/archive/2008/10/30/65551.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>new delete, free malloc略谈</title><link>http://www.cppblog.com/Carriexiaxia/archive/2008/10/30/65521.html</link><dc:creator>Carrie</dc:creator><author>Carrie</author><pubDate>Thu, 30 Oct 2008 02:41:00 GMT</pubDate><guid>http://www.cppblog.com/Carriexiaxia/archive/2008/10/30/65521.html</guid><wfw:comment>http://www.cppblog.com/Carriexiaxia/comments/65521.html</wfw:comment><comments>http://www.cppblog.com/Carriexiaxia/archive/2008/10/30/65521.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Carriexiaxia/comments/commentRss/65521.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Carriexiaxia/services/trackbacks/65521.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 首先应该知道malloc 和free是匹配的；new和delete是匹配的，他们不可以混淆。    malloc和new都申请空间，但是new是强类型的分配，会调用对象的构造函数初始化对象，而malloc仅分配内存空间但是不初始化。new   自适应类型，malloc需要强制转换new按类型进行分配，malloc需要指定内存大小对于对象来说free的确释放了对象的内存，但是不调用对象的析构函数。delete不仅释放对象的内存，并且调用对象的析构函数所以在对象中用free删除new创建的对象，内存就有可能泄露在delete内部仍调用了free &nbsp;&nbsp;<a href='http://www.cppblog.com/Carriexiaxia/archive/2008/10/30/65521.html'>阅读全文</a><img src ="http://www.cppblog.com/Carriexiaxia/aggbug/65521.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Carriexiaxia/" target="_blank">Carrie</a> 2008-10-30 10:41 <a href="http://www.cppblog.com/Carriexiaxia/archive/2008/10/30/65521.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Visual C++中对象的序列化与文件I/O研究(三)</title><link>http://www.cppblog.com/Carriexiaxia/archive/2008/10/26/65129.html</link><dc:creator>Carrie</dc:creator><author>Carrie</author><pubDate>Sun, 26 Oct 2008 12:08:00 GMT</pubDate><guid>http://www.cppblog.com/Carriexiaxia/archive/2008/10/26/65129.html</guid><wfw:comment>http://www.cppblog.com/Carriexiaxia/comments/65129.html</wfw:comment><comments>http://www.cppblog.com/Carriexiaxia/archive/2008/10/26/65129.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Carriexiaxia/comments/commentRss/65129.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Carriexiaxia/services/trackbacks/65129.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 文件I/O<br><br>　　虽然使用CArchive类内建的序列化功能是保存和加载持久性数据的便捷方式，但有时在程序中需要对文件处理过程拥有更多的控制权，对于这种文件输入输出（I/O）服务的需求，Windows提供了一系列相关的API函数，并由MFC将其封装为CFile类，提供了对文件进行打开，关闭，读，写，删除，重命名以及获取文件信息等文件操作的基本功能，足以处理任意类型的文件操作。CFile类是MFC文件类的基类，支持无缓冲的二进制输入输出，也可以通过与CArchive类的配合使用而支持对MFC对象的带缓冲的序列化。&nbsp;&nbsp;<a href='http://www.cppblog.com/Carriexiaxia/archive/2008/10/26/65129.html'>阅读全文</a><img src ="http://www.cppblog.com/Carriexiaxia/aggbug/65129.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Carriexiaxia/" target="_blank">Carrie</a> 2008-10-26 20:08 <a href="http://www.cppblog.com/Carriexiaxia/archive/2008/10/26/65129.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Visual C++中对象的序列化与文件I/O研究(二)</title><link>http://www.cppblog.com/Carriexiaxia/archive/2008/10/26/65128.html</link><dc:creator>Carrie</dc:creator><author>Carrie</author><pubDate>Sun, 26 Oct 2008 12:06:00 GMT</pubDate><guid>http://www.cppblog.com/Carriexiaxia/archive/2008/10/26/65128.html</guid><wfw:comment>http://www.cppblog.com/Carriexiaxia/comments/65128.html</wfw:comment><comments>http://www.cppblog.com/Carriexiaxia/archive/2008/10/26/65128.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Carriexiaxia/comments/commentRss/65128.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Carriexiaxia/services/trackbacks/65128.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 自定义持久类<br><br>　　为了使一个类的对象成为持久的，可以自定义一个持久类，将持久性数据的存储和加载的工作交由自定义类自己去完成。这种处理方式也更加符合面向对象的程序设计要求。可以通过下面几个基本步骤来创建一个能序列化其成员变量的自定义持久类：<br><br>　　1． 直接或间接从CObject类派生出一个新类。<br><br>　　2． 在类的声明部分包含MFC的DECLARE_SERIAL宏，该宏只需要将类名作为参数。<br><br>　　3． 重载基类的Serialize（）函数，并添加对数据成员进行序列化的代码。&nbsp;&nbsp;<a href='http://www.cppblog.com/Carriexiaxia/archive/2008/10/26/65128.html'>阅读全文</a><img src ="http://www.cppblog.com/Carriexiaxia/aggbug/65128.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Carriexiaxia/" target="_blank">Carrie</a> 2008-10-26 20:06 <a href="http://www.cppblog.com/Carriexiaxia/archive/2008/10/26/65128.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Visual C++中对象的序列化与文件I/O研究(一)</title><link>http://www.cppblog.com/Carriexiaxia/archive/2008/10/26/65127.html</link><dc:creator>Carrie</dc:creator><author>Carrie</author><pubDate>Sun, 26 Oct 2008 12:05:00 GMT</pubDate><guid>http://www.cppblog.com/Carriexiaxia/archive/2008/10/26/65127.html</guid><wfw:comment>http://www.cppblog.com/Carriexiaxia/comments/65127.html</wfw:comment><comments>http://www.cppblog.com/Carriexiaxia/archive/2008/10/26/65127.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Carriexiaxia/comments/commentRss/65127.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Carriexiaxia/services/trackbacks/65127.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 持久性是对象所有的保存和加载其状态数据的能力。具有这种能力的对象能够在应用程序结束之前以某种方式将当前的对象状态数据记录下来，当程序再次运行时，通过对这些数据的读取而恢复到上一次任务结束时的状态。由于绝大多数的MFC类是直接或间接由MFC的CObject类派生出来的，因此这些MFC类都具有保存和加载对象状态的能力，是具有持久性的。在使用应用程序向导生成文档/视结构的程序框架时，就已经为应用程序提供了用于对象状态数据保存和加载的基本代码。<br><br>&nbsp;&nbsp;<a href='http://www.cppblog.com/Carriexiaxia/archive/2008/10/26/65127.html'>阅读全文</a><img src ="http://www.cppblog.com/Carriexiaxia/aggbug/65127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Carriexiaxia/" target="_blank">Carrie</a> 2008-10-26 20:05 <a href="http://www.cppblog.com/Carriexiaxia/archive/2008/10/26/65127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通俗解释socket--引自it smiles C++ Blog</title><link>http://www.cppblog.com/Carriexiaxia/archive/2008/10/26/65126.html</link><dc:creator>Carrie</dc:creator><author>Carrie</author><pubDate>Sun, 26 Oct 2008 12:03:00 GMT</pubDate><guid>http://www.cppblog.com/Carriexiaxia/archive/2008/10/26/65126.html</guid><wfw:comment>http://www.cppblog.com/Carriexiaxia/comments/65126.html</wfw:comment><comments>http://www.cppblog.com/Carriexiaxia/archive/2008/10/26/65126.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Carriexiaxia/comments/commentRss/65126.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Carriexiaxia/services/trackbacks/65126.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: socket是网络编程的基础，本文用打电话来类比socket通信中建立TCP连接的过程。<br>    socket函数，表示你买了或者借了一部手机。<br>    bind函数，告诉别人你的手机号码，让他们给你打电话。<br>    listen函数，打开手机的铃声，而不是静音，这样有电话时可以立马反应。listen函数的第二个参数，最大连接数，表示最多有几个人可以同时拨打你的号码。不过我们的手机，最多只能有一个人打进来，要不然就提示占线。<br>    connect函数，你的朋友知道了你的号码，通过这个号码来联系你。在他等待你回应的时候，不能做其他事情，所以connect函数是阻塞的。<br>    accept函数，你听到了电话铃声，接电话，accept it！然后“喂”一声，你的朋友听到你的回应，知道电话已经打进去了。至此，一个TCP连接建立了。&nbsp;&nbsp;<a href='http://www.cppblog.com/Carriexiaxia/archive/2008/10/26/65126.html'>阅读全文</a><img src ="http://www.cppblog.com/Carriexiaxia/aggbug/65126.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Carriexiaxia/" target="_blank">Carrie</a> 2008-10-26 20:03 <a href="http://www.cppblog.com/Carriexiaxia/archive/2008/10/26/65126.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ STL基本容器比较</title><link>http://www.cppblog.com/Carriexiaxia/archive/2008/10/25/65002.html</link><dc:creator>Carrie</dc:creator><author>Carrie</author><pubDate>Sat, 25 Oct 2008 06:55:00 GMT</pubDate><guid>http://www.cppblog.com/Carriexiaxia/archive/2008/10/25/65002.html</guid><wfw:comment>http://www.cppblog.com/Carriexiaxia/comments/65002.html</wfw:comment><comments>http://www.cppblog.com/Carriexiaxia/archive/2008/10/25/65002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Carriexiaxia/comments/commentRss/65002.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Carriexiaxia/services/trackbacks/65002.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在STL中基本容器有: string、vector、list、deque、set、map<br><br>set 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问<br><br>set:集合, 用来判断某一个元素是不是在一个组里面,使用的比较少<br>map:映射,相当于字典,把一个值映射成另一个值,如果想创建字典的话使用它好了<br><br>string、vector、list、deque、set 是有序容器&nbsp;&nbsp;<a href='http://www.cppblog.com/Carriexiaxia/archive/2008/10/25/65002.html'>阅读全文</a><img src ="http://www.cppblog.com/Carriexiaxia/aggbug/65002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Carriexiaxia/" target="_blank">Carrie</a> 2008-10-25 14:55 <a href="http://www.cppblog.com/Carriexiaxia/archive/2008/10/25/65002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>