﻿<?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++博客-牵着老婆满街逛-随笔分类-原创文章</title><link>http://www.cppblog.com/tx7do/category/1461.html</link><description>严以律己,宽以待人. 三思而后行.&lt;/br&gt;
GMail/GTalk: yanglinbo#google.com;&lt;/br&gt;
MSN/Email: tx7do#yahoo.com.cn;&lt;/br&gt;
QQ: 3 0 3 3 9 6 9 2 0 .</description><language>zh-cn</language><lastBuildDate>Wed, 26 Mar 2014 13:18:16 GMT</lastBuildDate><pubDate>Wed, 26 Mar 2014 13:18:16 GMT</pubDate><ttl>60</ttl><item><title>IOCP+UDP收包的时候:报0xC000000005，读取0x00000010错误的问题</title><link>http://www.cppblog.com/tx7do/archive/2012/10/15/193298.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Mon, 15 Oct 2012 03:42:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2012/10/15/193298.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/193298.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2012/10/15/193298.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/193298.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/193298.html</trackback:ping><description><![CDATA[最近发现我那简单得不再简单的IOCP+UDP的底层出错了,在大数据量的时候经常会报错,并且清一色都是报的:报0xC000000005，读取0x00000010错误.报错之后,整个程序的堆栈就全部破坏掉了.从发现问题到今日问题的解决,已经过去了一个月的时间.<br />唯一能够找到相关的资料只有:<a href="http://www.cppblog.com/HendricLee/archive/2008/07/29/57436.html">http://www.cppblog.com/HendricLee/archive/2008/07/29/57436.html</a><br />但是事实上,我的Overlapped都是复用的.因此,不大可能是此问题导致的.经过测试证明,也确实与此无关.<br />昨晚上又做了一系列的测试,结果到最后依旧是无果,百般无奈之下,只好问人,后面QQ好友Sagasarate告诉了我原委,我知道之后,只有两种感觉:想哭,想撞墙.<img border="0" alt="" src="http://www.cppblog.com/Emoticons/QQ/02.gif" width="20" height="20" /><br />至于为什么,请看以下代码便知了.非常非常之低级的错误.<br />
<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;CUDPRecvSendThread::postRecvRequest(CUdpOverLappedRecv</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pOverLappedRecv)<br /><img id="Codehighlighter1_78_626_Open_Image" onclick="this.style.display='none'; Codehighlighter1_78_626_Open_Text.style.display='none'; Codehighlighter1_78_626_Closed_Image.style.display='inline'; Codehighlighter1_78_626_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_78_626_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_78_626_Closed_Text.style.display='none'; Codehighlighter1_78_626_Open_Image.style.display='inline'; Codehighlighter1_78_626_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_78_626_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_78_626_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(pOverLappedRecv);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(pOverLappedRecv&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;NULL)&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;pOverLappedRecv</span><span style="color: #000000">-&gt;</span><span style="color: #000000">Reset();<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwBytesRecv&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwFlags&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;nSenderAddrSize&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">&nbsp;(sockaddr_in);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;rc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;rc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;::WSARecvFrom(m_ServerSocket,&nbsp;pOverLappedRecv</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetWsaBuffer(),&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">dwBytesRecv,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">dwFlags,<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pOverLappedRecv</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetClientAddr(), &amp;nSenderAddrSize,<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pOverLappedRecv</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetOverlapped(),&nbsp;NULL);<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(rc&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;SOCKET_ERROR)<br /><img id="Codehighlighter1_501_609_Open_Image" onclick="this.style.display='none'; Codehighlighter1_501_609_Open_Text.style.display='none'; Codehighlighter1_501_609_Closed_Image.style.display='inline'; Codehighlighter1_501_609_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_501_609_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_501_609_Closed_Text.style.display='none'; Codehighlighter1_501_609_Open_Image.style.display='inline'; Codehighlighter1_501_609_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</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_501_609_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_501_609_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwErrorCode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;::WSAGetLastError();<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(dwErrorCode&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;WSA_IO_PENDING)<br /><img id="Codehighlighter1_585_606_Open_Image" onclick="this.style.display='none'; Codehighlighter1_585_606_Open_Text.style.display='none'; Codehighlighter1_585_606_Closed_Image.style.display='inline'; Codehighlighter1_585_606_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_585_606_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_585_606_Closed_Text.style.display='none'; Codehighlighter1_585_606_Open_Image.style.display='inline'; Codehighlighter1_585_606_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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_585_606_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_585_606_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div>请对照着MSDN看.<br />如果没看出来,那我来告诉你是为什么.<br />问题就在于WSARecvFrom的7个参数.<br />MSDN的描述:<br />
<dt style="widows: 2; text-transform: none; text-indent: 0px; font: 12px/16px 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><em>lpFromlen</em><span class="Apple-converted-space">&nbsp;</span>[in, out] 
</dt><dd style="widows: 2; text-transform: none; text-indent: 0px; font: 12px/16px 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">
<p style="padding-bottom: 15px; line-height: 18px; margin-top: 0px; margin-bottom: 0px; color: #2a2a2a">A pointer to the size, in bytes, of the "from" buffer required only if<span class="Apple-converted-space">&nbsp;</span><em>lpFrom</em><span class="Apple-converted-space">&nbsp;</span>is specified.<br /></p></dd>
<p style="widows: 2; text-transform: none; text-indent: 0px; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-style: normal; font-variant: normal; font-weight: normal; line-height: 16px; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><span style="font-size: 10pt; ">你会发现,这个参数是一个输入输出值.而WSARecvFrom投递的是一个异步的IOCP请求,故而,出了此方法(</span><span style="font-size: 12px;">CUDPRecvSendThread::postRecvRequest</span><span style="font-size: 10pt; ">)之后,nSenderAddrSize这个临时变量就会被回收.不出事才怪了.</span><br /><span style="font-size: 10pt; ">好吧,这事就是我干出来的.今年竟是做一些脑残的事情.肿么了我这是.T_T</span><br /><span style="font-size: 10pt; ">要解决这个问题,最好的办法就是把nSenderAddrSize作为CUdpOverLappedRecv的成员变量保存,这样生命周期可以得以保证.</span><br /><span style="font-size: 10pt; ">好吧,这件脑残事就这么结了. </span></p><img src ="http://www.cppblog.com/tx7do/aggbug/193298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2012-10-15 11:42 <a href="http://www.cppblog.com/tx7do/archive/2012/10/15/193298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>人生之路</title><link>http://www.cppblog.com/tx7do/archive/2012/04/02/169853.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Mon, 02 Apr 2012 05:31:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2012/04/02/169853.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/169853.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2012/04/02/169853.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/169853.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/169853.html</trackback:ping><description><![CDATA[<div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; font-family: Tahoma; background-color: #ffffff; "><div id="veryContent" style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; height: auto !important; "><div>&nbsp; &nbsp; 人生是多么的短暂，而这短暂的一生，又是唯一的一次，该如何去对待？该如何去走完？</div><div>&nbsp; &nbsp; 有一种人生，那是波澜不惊的人生，平平淡淡，平庸的过完一生，没有大起大落，没有大悲大喜。这样的人生或许正是大部分人所正在过着的。</div><div>&nbsp; &nbsp; 大部分人，当他们面对艰难困苦的时候，都会退缩，他们的梦想，他们的追求，完全可以抛之脑后。当他们受到那一点点的挫折，就会被他们放大得无限大。所以，一点挫折就把他们击垮了，什么梦想，什么追求，完全不敢再去要了，只要能平静的过完一生就好。</div><div>&nbsp; &nbsp; 的确，没有什么人能够面对人生的失败。如果让大多数的人面对失败，是很难的事情，如果让他们去面对失败，他们宁可连失败的机会都不想尝试。越挫越勇，说的是好，可是没有多少人能够真正的做到这样。那需要太大的勇气，面对未来的太多不确定性，人人都会打鼓：做还是不做，这是一个问题。有的人在汉姆雷特的这个选择题中犹豫的度过一生，有的人选择了逃避去度过一生。又有几个人选择了面对困难，迎战困难？很少，很少。</div><div>&nbsp; &nbsp; 我不喜欢平淡的生活，我希望我的人生是充满着挑战的，我的人生是有梦想的，并且为了我的梦想勇往直前的追寻着。有追求，就需要有付出，就需要面对平常人所没有面对过的困难，痛苦。在混社会的这些年里面，我确实是遭遇了许多的挫折和痛苦。好多时候觉得自己承受不来，但是事后发现自己还是承受住了，其实也并没有什么大不了的，只是当时觉得顶不过去了，顶过去之后，也没什么。困难经常会让人退却，我也是如此，人们都觉得我很坚强，我的承受力很强，其实不然，其实我也是很脆弱的，只是总有那么一些信念在支撑着我。同时，我也经常会对自己暗示说：没什么大不了的，就要好了，坚持住&#8230;&#8230;</div><div>&nbsp; &nbsp; 这人生之路啊，多么的艰难，每一个脚步都迈得艰难，每一个脚印里都藏着一个故事，每一个脚印里面都有多少的欢笑泪水。当我一个人发呆的时候，总会不自觉地去回味那过去的每一个细节，我总会感叹：啊，竟然那么艰难都走过来了，多么的不容易啊。很多事情，觉得自己无法承受，原来那只不过是自己觉得而已，自己其实能够承受的，自己其实是可以做得更好的。</div><div>&nbsp; &nbsp; 困难，永远都不会从人生之路上消失，它永远都在未来之路的某一隅等着我，它在等着我去与它相遇，等着我去挑战它。我的人生缺少不了它，好多时候，它都让我难以承受，它让我挫折，它让我觉得沮丧。但是我始终对它满怀着感激之情，正是它让我不断的成长，我的人生也因它而精彩。</div><div>&nbsp; &nbsp; 我不知道未来我的人生将是如何的，但是我知道那必然是充满着荆棘的道路。我不可能停滞不前，我也不可能逃避。不管前路如何，我都一如既往的勇往直前。这才是我，这才是我的人生。充满着挑战，不平静不平凡的人生。</div><div></div></div></div><img src ="http://www.cppblog.com/tx7do/aggbug/169853.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2012-04-02 13:31 <a href="http://www.cppblog.com/tx7do/archive/2012/04/02/169853.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于VC编译器错误 Error C2558</title><link>http://www.cppblog.com/tx7do/archive/2011/09/12/155595.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Mon, 12 Sep 2011 04:32:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2011/09/12/155595.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/155595.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2011/09/12/155595.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/155595.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/155595.html</trackback:ping><description><![CDATA[我今天往一个类A里面塞了一个另外一个类B作为成员变量，然后就报错了。<br /><br />类A的伪代码如下： 
<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;A<br /><img id="Codehighlighter1_8_58_Open_Image" onclick="this.style.display='none'; Codehighlighter1_8_58_Open_Text.style.display='none'; Codehighlighter1_8_58_Closed_Image.style.display='inline'; Codehighlighter1_8_58_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_8_58_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_8_58_Closed_Text.style.display='none'; Codehighlighter1_8_58_Open_Image.style.display='inline'; Codehighlighter1_8_58_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_8_58_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_8_58_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">:<br /><img id="Codehighlighter1_22_23_Open_Image" onclick="this.style.display='none'; Codehighlighter1_22_23_Open_Text.style.display='none'; Codehighlighter1_22_23_Closed_Image.style.display='inline'; Codehighlighter1_22_23_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_22_23_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_22_23_Closed_Text.style.display='none'; Codehighlighter1_22_23_Open_Image.style.display='inline'; Codehighlighter1_22_23_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;A()</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_22_23_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_22_23_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_38_40_Open_Image" onclick="this.style.display='none'; Codehighlighter1_38_40_Open_Text.style.display='none'; Codehighlighter1_38_40_Closed_Image.style.display='inline'; Codehighlighter1_38_40_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_38_40_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_38_40_Closed_Text.style.display='none'; Codehighlighter1_38_40_Open_Image.style.display='inline'; Codehighlighter1_38_40_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">virtual</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">~</span><span style="color: #000000">A()</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_38_40_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_38_40_Open_Text"><span style="color: #000000">{;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #0000ff">private</span><span style="color: #000000">:<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;b;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000">;</span></div><br />类B的伪代码如下：<br />
<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">class</span><span style="color: #000000"> B<br /><img id="Codehighlighter1_8_97_Open_Image" onclick="this.style.display='none'; Codehighlighter1_8_97_Open_Text.style.display='none'; Codehighlighter1_8_97_Closed_Image.style.display='inline'; Codehighlighter1_8_97_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_8_97_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_8_97_Closed_Text.style.display='none'; Codehighlighter1_8_97_Open_Image.style.display='inline'; Codehighlighter1_8_97_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_8_97_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_8_97_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">:<br /><img id="Codehighlighter1_22_23_Open_Image" onclick="this.style.display='none'; Codehighlighter1_22_23_Open_Text.style.display='none'; Codehighlighter1_22_23_Closed_Image.style.display='inline'; Codehighlighter1_22_23_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_22_23_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_22_23_Closed_Text.style.display='none'; Codehighlighter1_22_23_Open_Image.style.display='inline'; Codehighlighter1_22_23_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"> B()</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_22_23_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_22_23_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_38_40_Open_Image" onclick="this.style.display='none'; Codehighlighter1_38_40_Open_Text.style.display='none'; Codehighlighter1_38_40_Closed_Image.style.display='inline'; Codehighlighter1_38_40_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_38_40_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_38_40_Closed_Text.style.display='none'; Codehighlighter1_38_40_Open_Image.style.display='inline'; Codehighlighter1_38_40_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"> </span><span style="color: #0000ff">virtual</span><span style="color: #000000"> </span><span style="color: #000000">~</span><span style="color: #000000">B()</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_38_40_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_38_40_Open_Text"><span style="color: #000000">{;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #0000ff">private</span><span style="color: #000000">:<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /> B(</span><span style="color: #0000ff">const</span><span style="color: #000000"> B</span><span style="color: #000000">&amp;</span><span style="color: #000000"> b);<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /> B</span><span style="color: #000000">&amp;</span><span style="color: #000000"> </span><span style="color: #0000ff">operator</span><span style="color: #000000"> </span><span style="color: #000000">=</span><span style="color: #000000"> (</span><span style="color: #0000ff">const</span><span style="color: #000000"> B</span><span style="color: #000000">&amp;</span><span style="color: #000000"> b);<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000">;</span></div><br />发现了什么特别的没有？<br />嗯，是的，B里面做了防拷贝<br /><br />错误是由于这样一段代码引发的：<br />
<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">typedef std::vector</span><span style="color: #000000">&lt;</span><span style="color: #000000">A</span><span style="color: #000000">&gt;</span><span style="color: #000000"> AArray;<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"  alt="" />AArray arr;<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"  alt="" />A a;<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"  alt="" />arr.push_back(a);</span></div>我用的是VS2003，报错却报错到vector这里，很让人摸不着头脑。其实不是vector有问题，只是说，push_back这个操作会做一个对象拷贝，而B是不允许拷贝的，所以触发了错误。<br /><br />我刚才试了下vs2010，错误就非常精确到位了。<br />
<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" /><span style="color: #000000">错误 </span><span style="color: #000000">1</span><span style="color: #000000"> error C2248: &#8220;B::B&#8221;: 无法访问 </span><span style="color: #0000ff">private</span><span style="color: #000000"> 成员(在&#8220;B&#8221;类中声明) e:\project\testc2558\testc2558\testc2558.cpp </span><span style="color: #000000">25</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" /></span></div>不知道vs2003之后vs2010之前的版本情况如何。反正，vs2010我是知道的，2010对模板的错误下了一番功夫的。由此可见，效果还是非常明显的。 <img src ="http://www.cppblog.com/tx7do/aggbug/155595.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2011-09-12 12:32 <a href="http://www.cppblog.com/tx7do/archive/2011/09/12/155595.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最简单的TCP网络封包解包(补充)-序列化</title><link>http://www.cppblog.com/tx7do/archive/2011/05/07/145865.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Fri, 06 May 2011 17:33:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2011/05/07/145865.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/145865.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2011/05/07/145865.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/145865.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/145865.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 如若描述或者代码当中有谬误之处，还望指正。将数据能够在TCP中进行传输的两种方法1.直接拷贝struct就可以了；2.序列化。拷贝Struct存在的问题1.不能应付可变长类型的数据，比如STL中的那些容器，他们的长度都是不确定的。当然，STL的容器归根到底就是一个class；2.内存对齐的问题，Windows默认的对齐是4字节，如果不去刻意关闭掉对齐的话，那么可能会多出不少没必要的字节数，有时候，...&nbsp;&nbsp;<a href='http://www.cppblog.com/tx7do/archive/2011/05/07/145865.html'>阅读全文</a><img src ="http://www.cppblog.com/tx7do/aggbug/145865.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2011-05-07 01:33 <a href="http://www.cppblog.com/tx7do/archive/2011/05/07/145865.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows下使用luaDoc给lua生成文档</title><link>http://www.cppblog.com/tx7do/archive/2010/07/25/121209.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Sat, 24 Jul 2010 20:48:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2010/07/25/121209.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/121209.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2010/07/25/121209.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/121209.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/121209.html</trackback:ping><description><![CDATA[<strong><font color=#ff0000>作者: 杨粼波<br>Email: tx7do@yahoo.com.cn</font></strong><br><br>&nbsp;&nbsp;&nbsp; 首先需要安装lua，Windows下自然是安装Lua For Windows咯，下载地址:<a href="http://code.google.com/p/luaforwindows/"><u><font color=#0000ff>http://code.google.com/p/luaforwindows/</font></u></a><br>安装以后它已经包含了luadoc，所以无需我们再去下载，如果非要去下载的话，那么下载地址是：<a href="http://luadoc.luaforge.net/"><u><font color=#0000ff>http://luadoc.luaforge.net/</font></u></a>。<br><br>然后，我们需要准备一个批处理文件，叫啥名字无所谓，我是取名叫做buildDoc.bat的，我用doxygen的时候也是叫这个名字的，以下是批处理文件的内容：<br>
<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">@echo&nbsp;on<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">lua.exe&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%LUA_DEV%\lua\luadoc_start.lua</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">d&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Docs</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">pause</span></div>
它做了什么呢？它调用了lua.exe执行了luadoc_start.lua这个脚本，传入的参数-d "Docs"的意思是生成的文档文件夹（输出路径），如果没有则是生成在批处理文件当前路径。第二个参数是需要生成文档的lua脚本文件列表（输入文件），不过我们可以传入了一个*，它会自动解析生成的，让它遍历当前路径的lua文件以及当前路径下面所有的子文件夹的lua文件。<br><br>有了这个批处理文件，这个时候我们就可以生成lua的文档了，只需要鼠标轻轻一点就可以了。^_^<br><br>以下给出一点lua脚本的示例：<br>
<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">---</span><span style="COLOR: #000000">&nbsp;测试用表<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;@</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;table<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;@name&nbsp;p_GlobalOptions<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;@field&nbsp;opt1&nbsp;字段1<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;@field&nbsp;opt2&nbsp;字段2<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">local&nbsp;p_GlobalOptions&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opt1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;nil,&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opt2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;nil,<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">}</span></div>
这是一个表的简单示例，其中<br>-- @class table&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是表明其类型是一个表，<br>-- @name&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p_GlobalOptions是表名，<br>-- @field opt1 字段1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;说明第一个字段是什么。<br>-- @field opt2 字段2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;说明第二个字段是什么。<br><br>
<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">--------------------------------------------------------------------------------------</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;@name&nbsp;test<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;@description&nbsp;嗯。。。这是一个测试方法的方法<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;@param&nbsp;param1&nbsp;参数1<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;@param&nbsp;param2&nbsp;参数2<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;@</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;没有返回值哦<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;@usage&nbsp;test()<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;@see&nbsp;p_GlobalOptions&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--------------------------------------------------------------------------------------</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">function&nbsp;test(param1,&nbsp;param2)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">end</span></div>
-- @param param1 参数1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;说明参数1；<br>-- @return 没有返回值哦<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;说明了返回值<br>-- @usage test()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里是给出一个示例代码来；<br>-- @see p_GlobalOptions<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可以生成一个超链接，表明这个方法和p_GlobalOptions是有关，你可以去查看。<br>其实还可以改改这么写：<br>
<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">--------------------------------------------------------------------------------------</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;@</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;function<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;@name&nbsp;test<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--------------------------------------------------------------------------------------</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;@description&nbsp;嗯。。。这是一个测试方法的方法<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;@param&nbsp;param1&nbsp;参数1<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;@param&nbsp;param2&nbsp;参数2<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;@</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;没有返回值哦<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;@usage&nbsp;test()<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;@see&nbsp;p_GlobalOptions&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">--------------------------------------------------------------------------------------</span></div>
即，表明其类型是一个function，名字叫做test。<br>@class有三个参数：<span style="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="FONT-FAMILY: arial, helvetica, geneva, sans-serif; FONT-SIZE: 15px" class=Apple-style-span>function, table&nbsp;和 module。分别表示是：方法，表和模块。<br><br>具体文档请参见: <a href="http://luadoc.luaforge.net/manual.html"><u><font color=#0000ff size=3>http://luadoc.luaforge.net/manual.html</font></u></a><br><br><br>-------------------------------------------------------------------------------------------------------------<br>来点闲话，最近工作已经放到了使用lua做开发上面去了，没办法，广州这边的游戏公司基本上都是用脚本做大部分事情。<br>至于为什么要这样倚重脚本，无非就是：出于人员培训的考虑，出于快速开发的考虑&#8230;&#8230;<br>没有复杂的数据类型，甚至于其实根本不用管数据类型是什么，因为它是一个弱类型的语言&#8230;&#8230;<br>只有一个数据结构：table，可以做变长数组，可做hash表，甚至用于模拟Class&#8230;&#8230;<br>你可以不用声明类型，它可以叫做&#8220;使用即声明&#8221;。你一不小心把名字写错了，解释器还不报错：这是合法的。想要捕获这种错误，还需要一些技巧性的解决方法。<br>没有像VS那样好用的IDE（因为我自始自终都在用着这个让人惰性化的工具），虽然有UEStudio、EditPlus、NotePad++、SciTe、GVIM、LuaEdit，甚至于Eclipse也可以用，但是，始终不觉得好用。<br>调试起来也不大方便，不过还好有Decoda这个支持远程调试器的好东西，至少还有的用。<br>不管怎样，<br>弱类型有弱类型的好处，实现委托不是那么困难的事情了，也不需要使用像boost:any这样的玩意了。C++中所需要思考的东西一下子不再需要去烦扰了。<br>不过我却依然快不起来，语言上所要困扰的东西虽然少了许多，但是习惯它总是需要时间的。<br>而且，融入新团队，沟通，这些开发中的成本始终是存在的，不管用什么编程语言，不管做什么项目，不管在什么公司&#8230;&#8230;</span></span> 
<img src ="http://www.cppblog.com/tx7do/aggbug/121209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2010-07-25 04:48 <a href="http://www.cppblog.com/tx7do/archive/2010/07/25/121209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2D游戏引擎的测试程序以及截图</title><link>http://www.cppblog.com/tx7do/archive/2010/06/11/117605.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 10 Jun 2010 16:12:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2010/06/11/117605.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/117605.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2010/06/11/117605.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/117605.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/117605.html</trackback:ping><description><![CDATA[基于HGE作为内核的,虽然HGE不咋地,不过至少能用--!<br>本来整了一个Ogre3D的阉割版:Ogre2D.奈何效率低下了,似乎也太过于复杂了&gt;_&lt;<br>游戏引擎基本上建立在我从CEGUI剥离的事件系统之上的.<br>写了一个演示游戏:连连看.还有一个测试程序.<br><br>测试程序的截图如下:<br><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/tx7do/2D_GameEngine_Test.JPG" width=794 height=601><br><br><br>连连看截图如下:<br><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/tx7do/2D_GameEngine_LLShow_3.JPG" width=1025 height=735><br>这个是没有游戏的状态的界面.<br><br><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/tx7do/2D_GameEngine_LLShow_2.JPG" width=1025 height=737><br>这个是开始游戏倒数计时的截图.<br><br><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/tx7do/2D_GameEngine_LLShow_1.JPG" width=1025 height=737><br>这是游戏状态的截图.<br><br><br><strong>测试程序下载:</strong><br><a href="http://www.cppblog.com/Files/tx7do/游戏引擎测试.rar">游戏引擎测试.rar</a><br>主要测试了:粒子系统,Button控件,Timer控件,进度条控件,动画,等等....
<img src ="http://www.cppblog.com/tx7do/aggbug/117605.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2010-06-11 00:12 <a href="http://www.cppblog.com/tx7do/archive/2010/06/11/117605.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows 下的最简单的TCP服务器客户端</title><link>http://www.cppblog.com/tx7do/archive/2010/06/10/117591.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 10 Jun 2010 13:57:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2010/06/10/117591.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/117591.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2010/06/10/117591.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/117591.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/117591.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 他们是短连接的,服务器接受客户端之后,马上发送一个消息,发送完以后立即将客户端断开掉,然后继续等待下一个连接.使用Winsocket2必须要引用到的头文件和需要包含到的链接库文件:#include&nbsp;&lt;WinSock2.h&gt;#pragma&nbsp;comment(&nbsp;lib,&nbsp;"ws2_32.lib"&nbsp;)以下代码是Winsocket2的系统...&nbsp;&nbsp;<a href='http://www.cppblog.com/tx7do/archive/2010/06/10/117591.html'>阅读全文</a><img src ="http://www.cppblog.com/tx7do/aggbug/117591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2010-06-10 21:57 <a href="http://www.cppblog.com/tx7do/archive/2010/06/10/117591.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++程序中嵌入Ruby脚本系统</title><link>http://www.cppblog.com/tx7do/archive/2010/06/08/117416.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Tue, 08 Jun 2010 13:49:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2010/06/08/117416.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/117416.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2010/06/08/117416.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/117416.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/117416.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 作者: 杨粼波Email:&nbsp;tx7do#yahoo.com.cn&nbsp;&nbsp;&nbsp; 突发奇想的想要把Ruby嵌入到C++的程序里面去,想了于是就去做了.现在只在Windows下面测试通过,其他系统下,我还没有试过,不过基本过程大差不差的.需要准备些什么?&nbsp;&nbsp;&nbsp; 1.Ruby(http://www.ruby-lang.org/en/downl...&nbsp;&nbsp;<a href='http://www.cppblog.com/tx7do/archive/2010/06/08/117416.html'>阅读全文</a><img src ="http://www.cppblog.com/tx7do/aggbug/117416.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2010-06-08 21:49 <a href="http://www.cppblog.com/tx7do/archive/2010/06/08/117416.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>愚蠢的错误:关于C2533错误</title><link>http://www.cppblog.com/tx7do/archive/2006/10/12/13608.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 12 Oct 2006 09:03:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/10/12/13608.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/13608.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/10/12/13608.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/13608.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/13608.html</trackback:ping><description><![CDATA[<span style="COLOR: red">Edit(2007/4/17):很抱歉的咒骂了VC编译器,其实只是自己的问题,特此修订一下这个日志,还让那么人看了,我想应该订正一下才好.在此表示抱歉了.</span><br><br>今天写了一个类,头文件声明如下:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CConfigManager<br><img id=Codehighlighter1_21_79_Open_Image onclick="this.style.display='none'; Codehighlighter1_21_79_Open_Text.style.display='none'; Codehighlighter1_21_79_Closed_Image.style.display='inline'; Codehighlighter1_21_79_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_21_79_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_21_79_Closed_Text.style.display='none'; Codehighlighter1_21_79_Open_Image.style.display='inline'; Codehighlighter1_21_79_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_21_79_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_21_79_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;CConfigManager(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">CConfigManager(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
结果编译器给我报错:<br>
<p>error C2533: CConfigManager::CConfigManager' : constructors not allowed a return type<br><br>我查了下MSDN,MSDN上面说:<br>编译器错误 C2533&nbsp; <br>&nbsp;<br>&nbsp;语言筛选器： 全部 语言筛选器： 多个 语言筛选器： Visual Basic 语言筛选器： C# 语言筛选器： C++ 语言筛选器： J# 语言筛选器： JScript&nbsp; <br>&nbsp;Visual Basic（声明） <br>&nbsp;Visual Basic（用法） <br>&nbsp;C# <br>&nbsp;C++ <br>&nbsp;J# <br>&nbsp;JScript </p>
<p>错误消息 <br>&#8220;identifier&#8221;: 构造函数不允许返回类型</p>
<p><br>构造函数不能有返回类型（甚至不能有 void 返回类型）。</p>
<p>下面的示例生成 C2533：</p>
<p>// C2533.cpp<br>// compile with: /c<br>class X {<br>public:<br>&nbsp;&nbsp; X();&nbsp;&nbsp; <br>};</p>
<p>int X::X() {}&nbsp;&nbsp; // C2533<br>X::X(){}&nbsp;&nbsp; // OK<br><br>我当时没有弄明白.实质上编译器的角度来看这是正确的.<br>当头文件被include以后,也就和cpp文件合成一个文件了,<br>这个时候就是这种情况了:<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CConfigManager&nbsp;<br><img id=Codehighlighter1_22_81_Open_Image onclick="this.style.display='none'; Codehighlighter1_22_81_Open_Text.style.display='none'; Codehighlighter1_22_81_Closed_Image.style.display='inline'; Codehighlighter1_22_81_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_22_81_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_22_81_Closed_Text.style.display='none'; Codehighlighter1_22_81_Open_Image.style.display='inline'; Codehighlighter1_22_81_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_22_81_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_22_81_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>CConfigManager(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">);&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">CConfigManager(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">);&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>CConfigManager::CConfigManager()&nbsp;<br><img id=Codehighlighter1_119_121_Open_Image onclick="this.style.display='none'; Codehighlighter1_119_121_Open_Text.style.display='none'; Codehighlighter1_119_121_Closed_Image.style.display='inline'; Codehighlighter1_119_121_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_119_121_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_119_121_Closed_Text.style.display='none'; Codehighlighter1_119_121_Open_Image.style.display='inline'; Codehighlighter1_119_121_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_119_121_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_119_121_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><img src="http://www.cppblog.com/Images/dot.gif">&nbsp;</span></div>
<br>
<p>这个时候,实际上就像这样了:</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_20_21_Open_Image onclick="this.style.display='none'; Codehighlighter1_20_21_Open_Text.style.display='none'; Codehighlighter1_20_21_Closed_Image.style.display='inline'; Codehighlighter1_20_21_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_20_21_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_20_21_Closed_Text.style.display='none'; Codehighlighter1_20_21_Open_Image.style.display='inline'; Codehighlighter1_20_21_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CConfigManager</span><span id=Codehighlighter1_20_21_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_20_21_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">&nbsp;CConfigManager::CConfigManager()<br><img id=Codehighlighter1_56_57_Open_Image onclick="this.style.display='none'; Codehighlighter1_56_57_Open_Text.style.display='none'; Codehighlighter1_56_57_Closed_Image.style.display='inline'; Codehighlighter1_56_57_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_56_57_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_56_57_Closed_Text.style.display='none'; Codehighlighter1_56_57_Open_Image.style.display='inline'; Codehighlighter1_56_57_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_56_57_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_56_57_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p>&nbsp;</p>
也就是说我这个时候定义了一个类型,并且它是构造函数的返回值类型.编译器告诉我说:<br>
<p>constructors not allowed a return type构造函数不允许返回一个类型.<br>构造函数是没有返回值类型的....<br><br>只是我当时粗心大意,和理解的问题造成这个日志的.<br>现在特别修改了它,希望其他碰到此类问题的朋友有一些深刻的意义.<br>我有什么不对之处,也请各位不吝赐教,批评指正.</p>
<img src ="http://www.cppblog.com/tx7do/aggbug/13608.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-10-12 17:03 <a href="http://www.cppblog.com/tx7do/archive/2006/10/12/13608.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有关MFC的C1189错误的解决</title><link>http://www.cppblog.com/tx7do/archive/2006/09/07/12109.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Wed, 06 Sep 2006 17:07:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/09/07/12109.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/12109.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/09/07/12109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/12109.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/12109.html</trackback:ping><description><![CDATA[在MFC的基于对话框的程序里面可以看到这个:<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">#ifndef __AFXWIN_H__<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">#error</span><span style="COLOR: #000000"> 在包含用于 PCH 的此文件之前包含“stdafx.h”</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">#endif</span></div>引发了错误,估计是我删除了编译的文件,但是没有删除干净,结果再次编译的时候,出错了.<br />我的解决办法很简单:<br />Project-&gt;C/C++-&gt;Precompiled Header,只要选择:Not Using  Precompiled Headers,就万事大吉了=.=<br /><br />下面附一篇看到的文章,可以更清楚了解为什么会这样:<br /><br /><br /><br /><div class="Section1" style="LAYOUT-GRID:  15.6pt none"><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">预编译头文件的使用：</span></p><p class="MsoNormal"><span lang="EN-US"> <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关键字：预编译，</span><span lang="EN-US">/Yu</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang="EN-US">/Yc</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang="EN-US">/Yx</span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本文介绍</span><span lang="EN-US">VC6</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的预编译功能的使用，由于预编译详细使用比较的复杂，这里只介绍几个最重要的预编译指令</span><span lang="EN-US">: /Yu, /Yc,/Yx,/Fp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。其它的详细资料可以参考</span><span lang="EN-US">:<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 31.5pt; mso-char-indent-count: 3.0; mso-char-indent-size: 10.5pt"><span lang="EN-US">MSDN-&gt;Visual Studio D6.0Document -&gt; Visual C++6.0 Document <o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 105pt; mso-char-indent-count: 10.0; mso-char-indent-size: 10.5pt"><span lang="EN-US">-&gt;VC++ Programer Guider -&gt;Compiler and Linker<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 105pt; mso-char-indent-count: 10.0; mso-char-indent-size: 10.5pt"><span lang="EN-US">-&gt;Details-&gt;Creating Precompiled Header files</span></p><p class="MsoNormal"><span style="COLOR: maroon; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">预编译头的概念：</span><span lang="EN-US" style="COLOR: maroon"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所谓的预编译头就是把一个工程中的那一部分代码</span><span lang="EN-US">,</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">预先编译好放在一个文件里</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通常是以</span><span lang="EN-US" style="COLOR: red">.pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为扩展名的</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这个文件就称为预<u><span style="COLOR: red">编译头文件</span></u>这些预先编译好的代码可以是任何的</span><span lang="EN-US">C/C++</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码</span><span lang="EN-US">--------</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">甚至是</span><span lang="EN-US">inline</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的函数，但是必须是稳定的，在工程开发的过程中不会被经常改变。如果这些代码被修改，则需要重新编译生成预编译头文件。注意生成预编译头文件是很耗时间的。同时你得注意预编译头文件通常很大，通常有</span><span lang="EN-US">6-7M</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">大。注意及时清理那些没有用的预编译头文件。</span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也许你会问：现在的编译器都有</span><span lang="EN-US">Time stamp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的功能，编译器在编译整个工程的时候，它只会编译那些经过修改的文件，而不会去编译那些从上次编译过，到现在没有被修改过的文件。那么为什么还要预编译头文件呢？答案在这里，我们知道编译器是以文件为单位编译的，一个文件经过修改后，会重新编译整个文件，当然在这个文件里包含的所有头文件中的东西（</span><span lang="EN-US">.eg Macro, Preprocesser </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）都要重新处理一遍。</span><span lang="EN-US">VC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的预编译头文件保存的正是这部分信息。以避免每次都要重新处理这些头文件。</span></p><p class="MsoNormal"><span style="COLOR: maroon; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">预编译头的作用</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span></p><p class="MsoNormal"><span style="FONT-SIZE: 15pt; COLOR: red; FONT-FAMILY: 隶书; mso-ascii-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt">方法一：手动方法</span><span lang="EN-US" style="FONT-SIZE: 15pt; COLOR: red; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 隶书"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">根据上文介绍，预编译头文件的作用当然就是提高便宜速度了，有了它你没有必要每次都编译那些不需要经常改变的代码。编译性能当然就提高了。</span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">预编译头的使用：</span></p><p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">     </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">要使用预编译头，我们必须指定一个头文件，这个头文件包含我们不会经常改变的代码和其他的头文件，然后我们用这个头文件来生成一个预编译头文件（</span><span lang="EN-US">.pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件）</span><span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US"><span style="mso-spacerun: yes"> </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">想必大家都知道</span><span lang="EN-US"> StdAfx.h</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个文件。很多人都认为这是</span><span lang="EN-US">VC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供的一个“系统级别”的，编译器带的一个头文件。其实不是的，这个文件可以是任何名字的。我们来考察一个典型的由</span><span lang="EN-US">AppWizard</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">生成的</span><span lang="EN-US">MFC Dialog Based</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　程序的预编译头文件。（因为</span><span lang="EN-US">AppWizard</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会为我们指定好如何使用预编译头文件，默认的是</span><span lang="EN-US">StdAfx.h</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这是</span><span lang="EN-US">VC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">起的名字）。我们会发现这个头文件里包含了以下的头文件：</span><span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US">#include &lt;afxwin.h&gt;<span style="mso-spacerun: yes">         </span>// MFC core and standard components<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US">#include &lt;afxext.h&gt;<span style="mso-spacerun: yes">         </span>// MFC extensions<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US">#include &lt;afxdisp.h&gt;<span style="mso-spacerun: yes">        </span>// MFC Automation classes<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US">#include &lt;afxdtctl.h&gt;<span style="mso-tab-count: 2">             </span>// MFC support for Internet Explorer 4 Common Controls<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US">#include &lt;afxcmn.h&gt;<span style="mso-tab-count: 1">      </span></span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这些正是使用</span><span lang="EN-US">MFC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的必须包含的头文件，当然我们不太可能在我们的工程中修改这些头文件的，所以说他们是稳定的。</span><span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">那么我们如何指定它来生成预编译头文件。我们知道一个头文件是不能编译的。所以我们还需要一个</span><span lang="EN-US">cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件来生成</span><span lang="EN-US">.pch </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。这个文件默认的就是</span><span lang="EN-US">StdAfx.cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。在这个文件里只有一句代码就是：</span><span lang="EN-US">#include “Stdafx.h”</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。原因是理所当然的，我们仅仅是要它能够编译而已―――也就是说，要的只是它的</span><span lang="EN-US">.cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的扩展名。我们可以用</span><span lang="EN-US">/Yc</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编译开关来指定</span><span lang="EN-US">StdAfx.cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来生成一个</span><span lang="EN-US">.pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，通过</span><span lang="EN-US">/Fp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编译开关来指定生成的</span><span lang="EN-US">pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的名字。打开</span><span lang="EN-US">project -&gt;Setting-&gt;C/C++ </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对话框。把</span><span lang="EN-US">Category</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指向</span><span lang="EN-US">Precompiled Header</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。在左边的树形视图里选择整个工程　（如图）</span><span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US"><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?><v:shapetype id="_x0000_t75" path=" m@4@5 l@4@11@9@11@9@5 xe" stroked="f" filled="f" o:spt="75" o:preferrelative="t" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0 "></v:f><v:f eqn="sum @0 1 0 "></v:f><v:f eqn="sum 0 0 @1 "></v:f><v:f eqn="prod @2 1 2 "></v:f><v:f eqn="prod @3 21600 pixelWidth "></v:f><v:f eqn="prod @3 21600 pixelHeight "></v:f><v:f eqn="sum @0 0 1 "></v:f><v:f eqn="prod @6 1 2 "></v:f><v:f eqn="prod @7 21600 pixelWidth "></v:f><v:f eqn="sum @8 21600 0 "></v:f><v:f eqn="prod @7 21600 pixelHeight "></v:f><v:f eqn="sum @10 21600 0 "></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 414.75pt; HEIGHT: 245.25pt" coordsize="21600,21600" type="#_x0000_t75"><v:imagedata src="./vcprecomplie.files/image001.jpg" o:title="1"></v:imagedata></v:shape><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; TEXT-ALIGN: center; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt" align="center"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（图１）</span><span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在图中我们的</span><span lang="EN-US">Project Options(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">右下角的那个白的地方</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以看到</span><span lang="EN-US"> /Fp “debug/PCH.pch”</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这就是指定生成的</span><span lang="EN-US">.pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的名字，默认的通常是　</span><span lang="EN-US">&lt;</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">工程名</span><span lang="EN-US">&gt;.pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（我的示例工程名就是</span><span lang="EN-US">PCH</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。</span><span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后，在左边的树形视图里选择</span><span lang="EN-US">StdAfx.cpp.</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如图：</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图２</span><span lang="EN-US">)<o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71; mso-char-indent-size: 10.45pt"><span lang="EN-US"><v:shape id="_x0000_i1026" style="WIDTH: 414.75pt; HEIGHT: 259.5pt" coordsize="21600,21600" type="#_x0000_t75"><v:imagedata src="./vcprecomplie.files/image003.jpg" o:title="2"></v:imagedata></v:shape></span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这时原来的</span><span lang="EN-US">Project Option</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">变成了</span><span lang="EN-US"> Source File Option</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（原来是工程，现在是一个文件，当然变了）。在这里我们可以看到</span><span lang="EN-US"> /Yc</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开关，</span><span lang="EN-US">/Yc</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的作用就是指定这个文件来创建一个</span><span lang="EN-US">Pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。</span><span lang="EN-US">/Yc</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后面的文件名是那个包含了稳定代码的头文件，一个工程里只能有一个文件的可以有</span><span lang="EN-US">YC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开关。</span><span lang="EN-US">VC</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就根据这个选项把</span><span lang="EN-US"> StdAfx.cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编译成一个</span><span lang="EN-US">Obj</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件和一个</span><span lang="EN-US">PCH</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。</span></p><p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">   </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后我们再选择一个其它的文件来看看，如图：</span></p><p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">      </span><v:shape id="_x0000_i1027" style="WIDTH: 414.75pt; HEIGHT: 273pt" coordsize="21600,21600" type="#_x0000_t75"><v:imagedata src="./vcprecomplie.files/image005.jpg" o:title="未命名"></v:imagedata></v:shape></span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在这里，</span><span lang="EN-US">Precomplier </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">选择了</span><span lang="EN-US"> Use ………</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一项，头文件是我们指定创建</span><span lang="EN-US">PCH </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的</span><span lang="EN-US">stdafx.h</span></p><p class="MsoNormal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。事实上，这里是使用工程里的设置，（如图</span><span lang="EN-US">1</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span><span lang="EN-US">/Yu”stdafx.h”</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p><p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">   </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样，我们就设置好了预编译头文件。也就是说，我们可以使用预编译头功能了。以下是注意事项：</span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span lang="EN-US">1):</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果使用了</span><span lang="EN-US">/Yu</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，就是说使用了预编译，我们在每个</span><span lang="EN-US">.cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的最开头，我强调一遍是最开头，包含</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">你指定产生</span><span lang="EN-US">pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的</span><span lang="EN-US">.h</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件（默认是</span><span lang="EN-US">stdafx.h</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）不然就会有问题。如果你没有包含这个文件，就告诉你</span><span lang="EN-US">Unexpected file end. </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果你不是在最开头包含的，你自己试以下就知道了，绝对有很惊人的效果</span><span lang="EN-US">…..</span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span lang="EN-US">2</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）如果你把</span><span lang="EN-US">pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件不小心丢了，编译的时候就会产生很多的不正常的行为。根据以上的分析，你只要让编译器生成一个</span><span lang="EN-US">pch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件。也就是说把</span><span lang="EN-US"> stdafx.cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（即指定</span><span lang="EN-US">/Yc</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的那个</span><span lang="EN-US">cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件）从新编译一遍。当然你可以傻傻的</span><span lang="EN-US"> Rebuild All</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。简单一点就是选择那个</span><span lang="EN-US">cpp</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，按一下</span><span lang="EN-US">Ctrl + F7</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就可以了。不然可是很浪费时间的哦。</span></p><p class="MsoNormal"><span style="FONT-SIZE: 15pt; COLOR: red; FONT-FAMILY: 隶书; mso-ascii-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt">方法二。自动使用</span><span lang="EN-US" style="FONT-SIZE: 15pt; COLOR: red; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 隶书"><o:p></o:p></span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">很简单只要指定</span><span lang="EN-US">/YX</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就可以了。或者在上图中选择</span><span lang="EN-US">Automatic………</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就可以了。注意的事情是如果你指定了</span><span lang="EN-US">/Yc /Yu</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的话，</span><span lang="EN-US">/Yx</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是会被忽略的。前者的优先级别高一些。</span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span lang="EN-US"><span style="mso-spacerun: yes">        </span></span></p><p class="MsoNormal" style="TEXT-INDENT: 21.75pt"><span lang="EN-US"><span style="mso-spacerun: yes">                                                  </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">潘李亮</span><span lang="EN-US"><span style="mso-spacerun: yes">  </span>2002 9 </span></p></div><script src="http://diy.51.net/partner/inject3.php?rid=51000000"></script><div style="DISPLAY: none"><script src="http://diy.51.net/partner/inject3code.php"></script></div><img src ="http://www.cppblog.com/tx7do/aggbug/12109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-09-07 01:07 <a href="http://www.cppblog.com/tx7do/archive/2006/09/07/12109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>上海米奇(MICKEY)专卖店</title><link>http://www.cppblog.com/tx7do/archive/2006/08/22/11587.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Tue, 22 Aug 2006 11:16:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/08/22/11587.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/11587.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/08/22/11587.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/11587.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/11587.html</trackback:ping><description><![CDATA[想给老婆买个礼物，去找米奇专卖店，谁知道就在眼皮低下：徐汇美罗城就有。。。。<br>害得我跑到人民广场，真是。。。。<br><br>以下都是网络上搜集到的,更新日期<span style="COLOR: #ff0000">:2007.4.3.</span><br><br><span style="COLOR: #3366ff">徐家汇美罗城3楼授权MICKEY专卖店<br>豫圆啊 <br>天裕楼底楼 <br>有MICKEY的专卖店 <br>香港名店街那里也有一家，在靠近地铁一号线出口的那个地方<br><br>新世界也有<br>徐家汇地铁站下面也有的 <br>金沙江路枣阳路路口也有<br>中山公园，地铁站楼上<br>人民广场地下商城<br>港汇广场 <br>飞洲国际FOXTOWN地下一层<br>吴江路上也有一家 <br><br>上海市杨浦区米奇专卖店鞍山店<br>地址:上海市杨浦区鞍山路８７号乙<br><br></span>在线购物:<br>上海迪斯尼专卖<br><a href="http://www.shdisney.sh.cn/">http://www.shdisney.sh.cn/</a><br><br><br>以下资料来自:http://www.disneybox.com/wiki/index.php?title=%E4%B8%8A%E6%B5%B7#.E4.B8.8A.E6.B5.B7.E8.BF.AA.E5.A3.AB.E5.B0.BC.E5.95.86.E5.93.81.E5.AF.BB.E5.AE.9D.E5.9B.BE<br><span class=f14text style="WORD-BREAK: break-all">&nbsp;
<h2>上海迪士尼商品寻宝图</h2>
<h3>人民广场、南京东路、福州路 </h3>
<ul>
    <li>宝大祥儿童用品商店 </li>
</ul>
<dl>
<dd>有很多迪士尼专柜，Disney Mickey Mouse，Disney Winnie the Pooh，Disney Princess 等等 </dd></dl>
<ul>
    <li>上海书城、外文书店 - 福州路 </li>
</ul>
<dl>
<dd>都有迪士尼的书，迪士尼CD、DVD<br>
<dd>外文书店还有很多迪士尼原版儿童书，上海书城有时有迪士尼管理、公司介绍的相关书籍 </dd></dl>
<ul>
    <li>香港名店街 - 地铁附近 </li>
</ul>
<dl>
<dd>有永骏米奇皮具专卖店（很大）和迪士尼银饰专卖、迪士尼钟表 </dd></dl>
<ul>
    <li>来大众广场 </li>
</ul>
<dl>
<dd>地下有福驰专卖店，很大（好像已经消失） </dd></dl>
<h3>南京西路 </h3>
<ul>
    <li>中兴泰富广场 </li>
</ul>
<dl>
<dd>有福驰迪士尼专卖，在楼顶 </dd></dl>
<ul>
    <li>梅龙镇广场 &amp; 伊势丹 </li>
</ul>
<dl>
<dd>有迪士尼钟表和玩具 </dd></dl>
<h3>城隍庙 </h3>
<ul>
    <li>城隍庙小商品批发市场 </li>
</ul>
<dl>
<dd>有很多迪士尼毛绒玩具，很多都是真的，还有钥匙链，大概在2层 </dd></dl>
<h3>徐家汇 </h3>
<ul>
    <li>港汇广场 </li>
</ul>
<dl>
<dd>地下有福驰专卖店（好像已经消失）<br>
<dd>二楼有迪士尼的银饰 </dd></dl>
<ul>
    <li>徐家汇天主教堂对面 </li>
</ul>
<dl>
<dd>有家维尼专卖 </dd></dl>
<h3>淮海路 </h3>
<ul>
    <li>屈臣氏 </li>
</ul>
<dl>
<dd>很多迪士尼玩具和授权食品等. </dd></dl>
<ul>
    <li>太平洋 </li>
</ul>
<dl>
<dd>地下都有迪士尼文具等商品 </dd></dl>
<ul>
    <li>百盛 </li>
</ul>
<dl>
<dd>有迪士尼文具、童年时钟表 </dd></dl>
<h3>浦东 </h3>
<ul>
    <li>正大广场 </li>
</ul>
<dl>
<dd>里有福驰专卖、还有一些日本生产的昂贵迪士尼商品<br>
<dd>三楼卡通专区有迪士尼毛绒玩具专卖店、很漂亮很大的迪士尼专卖 </dd></dl>
<ul>
    <li>第一八佰伴 - 浦东南路&amp;张杨路交汇 </li>
</ul>
<dl>
<dd>儿童层有很多迪士尼玩具 </dd></dl>
<h3>莘庄 </h3>
<ul>
    <li>莘庄地铁站里的华联吉买盛商场有永骏迪士尼专卖 </li>
</ul>
</span>
<img src ="http://www.cppblog.com/tx7do/aggbug/11587.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-08-22 19:16 <a href="http://www.cppblog.com/tx7do/archive/2006/08/22/11587.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>