﻿<?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/keyws/category/2424.html</link><description>C++ &amp;&amp; keyWordSpotting</description><language>zh-cn</language><lastBuildDate>Thu, 22 May 2008 09:19:01 GMT</lastBuildDate><pubDate>Thu, 22 May 2008 09:19:01 GMT</pubDate><ttl>60</ttl><item><title>【原】运算符重载与名字空间的困惑</title><link>http://www.cppblog.com/keyws/archive/2006/08/16/11304.html</link><dc:creator>keyws</dc:creator><author>keyws</author><pubDate>Wed, 16 Aug 2006 13:09:00 GMT</pubDate><guid>http://www.cppblog.com/keyws/archive/2006/08/16/11304.html</guid><wfw:comment>http://www.cppblog.com/keyws/comments/11304.html</wfw:comment><comments>http://www.cppblog.com/keyws/archive/2006/08/16/11304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/keyws/comments/commentRss/11304.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keyws/services/trackbacks/11304.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">   学习数据结构，用到了输入输出运算符重载，结果编译之下，错误重重，，随即停止学习进度，追查祸源，在花费巨大脑力与时间成本之后，终于知自己错误之所在，定位于名字空间之困扰。为牢记教训，写一简化版本记录</span>
				<span lang="EN-US">debug</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">过程如下，警示自己。<br /><br /></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						<font color="#ff0033">问题</font>：<br />   </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">   有如下两个代码文件：<br />   <span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">// 20060816_operator.cxx<br /></span></span>
		</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">
				<span style="COLOR: #008080"> 1</span> <span style="COLOR: #000000">#include </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000"> std;<br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000">#include </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">20060816_operator.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> argc, </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> argv[])<br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> GHH(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">GuoHonghua</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000">    Honghua ghh(GHH);<br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000">    cout </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> ghh </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> endl;<br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000">}</span></div>   
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">// 20060816_operator.h<br /></span></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"><span style="COLOR: #008080"> 1</span> <span style="COLOR: #000000">#ifndef _20060816_OPERATOR_GHH_<br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> _20060816_OPERATOR_GHH_    1</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Author : GuoHonghua<br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #008000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Date : 2006.08.16<br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #008000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> File : 20060816_operator.h</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000">#include </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000">#include </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Honghua<br /></span><span style="COLOR: #008080">11</span> <span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">12</span> <span style="COLOR: #000000">    friend std::ostream</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">(std::ostream</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> os, </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> Honghua</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> ghh);<br /></span><span style="COLOR: #008080">13</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br /></span><span style="COLOR: #008080">14</span> <span style="COLOR: #000000">    Honghua(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> ghh) : _ghh(ghh)<br /></span><span style="COLOR: #008080">15</span> <span style="COLOR: #000000">    {<br /></span><span style="COLOR: #008080">16</span> <span style="COLOR: #000000">    }<br /></span><span style="COLOR: #008080">17</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">18</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br /></span><span style="COLOR: #008080">19</span> <span style="COLOR: #000000">    std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> _ghh;<br /></span><span style="COLOR: #008080">20</span> <span style="COLOR: #000000">};<br /></span><span style="COLOR: #008080">21</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">22</span> <span style="COLOR: #000000">std::ostream</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">(std::ostream</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> os, </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> Honghua</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> ghh)<br /></span><span style="COLOR: #008080">23</span> <span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">24</span> <span style="COLOR: #000000">    os </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> ghh._ghh;<br /></span><span style="COLOR: #008080">25</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> os;<br /></span><span style="COLOR: #008080">26</span> <span style="COLOR: #000000">}<br /></span><span style="COLOR: #008080">27</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">28</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000"> </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> end of _20060816_OPERATOR_GHH_</span></div><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用上面两个文件建立工程，</span><span lang="EN-US">vc6.0</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="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US">--------------------Configuration: 20060816_operator - Win32 Debug--------------------</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US">Compiling...</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US">20060816_operator.cxx</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US">f:\ghh_project\cxxdetail\20060816_operator.h(24) : error C2248: '_ghh' : cannot access private member declared in class 'Honghua'</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US"><span style="mso-spacerun: yes">        </span>f:\ghh_project\cxxdetail\20060816_operator.h(19) : see declaration of '_ghh'</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US">F:\ghh_project\CxxDetail\20060816_operator.cxx(8) : error C2593: 'operator &lt;&lt;' is ambiguous</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US">Error executing cl.exe.</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p> </o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US">20060816_operator.exe - 2 error(s), 0 warning(s)<br /><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'"><font color="#ff0066">解决</font>:<br />   </span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font face="Times New Roman">1．<span style="FONT: 7pt 'Times New Roman'">  </span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">调整名字空间声明和自定义头文件的次序，如下：<br /></span></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"><span style="COLOR: #008080">1</span> <span style="COLOR: #000000">#include </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000">#include </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">20060816_operator.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">3</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000"> std;<br /></span><span style="COLOR: #008080">4</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> argc, </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> argv[])<br /></span><span style="COLOR: #008080">5</span> <span style="COLOR: #000000"></span></div><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">2．<span style="FONT: 7pt 'Times New Roman'">  </span></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">20060816_operator.h</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件修改如下（不推荐）<br /></span></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"><span style="COLOR: #008080"> 1</span> <span style="COLOR: #000000">#ifndef _20060816_OPERATOR_GHH_<br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> _20060816_OPERATOR_GHH_    1</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Author : GuoHonghua<br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #008000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Date : 2006.08.16<br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #008000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> File : 20060816_operator.h</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000">#include </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000">#include </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000"> std<br /></span><span style="COLOR: #008080">11</span> <span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">12</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Honghua<br /></span><span style="COLOR: #008080">13</span> <span style="COLOR: #000000">    {<br /></span><span style="COLOR: #008080">14</span> <span style="COLOR: #000000">        friend std::ostream</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">(std::ostream</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> os, </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> Honghua</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> ghh);<br /></span><span style="COLOR: #008080">15</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br /></span><span style="COLOR: #008080">16</span> <span style="COLOR: #000000">        Honghua(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> ghh) : _ghh(ghh)<br /></span><span style="COLOR: #008080">17</span> <span style="COLOR: #000000">        {<br /></span><span style="COLOR: #008080">18</span> <span style="COLOR: #000000">        }<br /></span><span style="COLOR: #008080">19</span> <span style="COLOR: #000000">        <br /></span><span style="COLOR: #008080">20</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br /></span><span style="COLOR: #008080">21</span> <span style="COLOR: #000000">        std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> _ghh;<br /></span><span style="COLOR: #008080">22</span> <span style="COLOR: #000000">    };<br /></span><span style="COLOR: #008080">23</span> <span style="COLOR: #000000">    <br /></span><span style="COLOR: #008080">24</span> <span style="COLOR: #000000">    <br /></span><span style="COLOR: #008080">25</span> <span style="COLOR: #000000">    std::ostream</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">(std::ostream</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> os, </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> Honghua</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> ghh)<br /></span><span style="COLOR: #008080">26</span> <span style="COLOR: #000000">    {<br /></span><span style="COLOR: #008080">27</span> <span style="COLOR: #000000">        os </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> ghh._ghh;<br /></span><span style="COLOR: #008080">28</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> os;<br /></span><span style="COLOR: #008080">29</span> <span style="COLOR: #000000">    }<br /></span><span style="COLOR: #008080">30</span> <span style="COLOR: #000000">}<br /></span><span style="COLOR: #008080">31</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000"> </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> end of _20060816_OPERATOR_GHH_</span> <span style="COLOR: #000000"></span></div><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">3．<span style="FONT: 7pt 'Times New Roman'">  </span></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">iostream.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">iostream,</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'">）<br /></span></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"><span style="COLOR: #008080"> 1</span> <span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 20060816_operator.cxx<br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #008000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> #include &lt;iostream&gt;</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">#include </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000">#include </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000">#include </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">20060816_operator.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> argc, </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> argv[])<br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> GHH(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">GuoHonghua</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000">    Honghua ghh(GHH);<br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000">    cout </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> ghh </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> endl;<br /></span><span style="COLOR: #008080">11</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">12</span> <span style="COLOR: #000000">}</span> <span style="COLOR: #000000"></span></div><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"><span style="COLOR: #008080"> 1</span> <span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 20060816_operator.h</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">#ifndef _20060816_OPERATOR_GHH_<br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000"> _20060816_OPERATOR_GHH_    1</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Author : GuoHonghua<br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #008000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Date : 2006.08.16<br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #008000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> File : 20060816_operator.h<br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #008000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> #include &lt;iostream&gt;</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">#include </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000">#include </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">11</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">12</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Honghua<br /></span><span style="COLOR: #008080">13</span> <span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">14</span> <span style="COLOR: #000000">    friend ostream</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">(ostream</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> os, </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> Honghua</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> ghh);<br /></span><span style="COLOR: #008080">15</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br /></span><span style="COLOR: #008080">16</span> <span style="COLOR: #000000">    Honghua(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> ghh) : _ghh(ghh)<br /></span><span style="COLOR: #008080">17</span> <span style="COLOR: #000000">    {<br /></span><span style="COLOR: #008080">18</span> <span style="COLOR: #000000">    }<br /></span><span style="COLOR: #008080">19</span> <span style="COLOR: #000000">    <br /></span><span style="COLOR: #008080">20</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br /></span><span style="COLOR: #008080">21</span> <span style="COLOR: #000000">    std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> _ghh;<br /></span><span style="COLOR: #008080">22</span> <span style="COLOR: #000000">};<br /></span><span style="COLOR: #008080">23</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">24</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">25</span> <span style="COLOR: #000000">ostream</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">(ostream</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> os, </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> Honghua</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"> ghh)<br /></span><span style="COLOR: #008080">26</span> <span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">27</span> <span style="COLOR: #000000">    os </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> ghh._ghh;<br /></span><span style="COLOR: #008080">28</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> os;<br /></span><span style="COLOR: #008080">29</span> <span style="COLOR: #000000">}<br /></span><span style="COLOR: #008080">30</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">31</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000"> </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> end of _20060816_OPERATOR_GHH_</span></div><br /><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">4．<span style="FONT: 7pt 'Times New Roman'">  </span></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">using namespace </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">声明！这是只需要修改</span><span lang="EN-US">20060816_operator.cxx</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件如下：<br /></span></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"><span style="COLOR: #008080"> 1</span> <span style="COLOR: #000000">#include </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000">#include </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">20060816_operator.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> argc, </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> argv[])<br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000">    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> const string GHH("GuoHonghua");</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> GHH(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">GuoHonghua</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000">    Honghua ghh(GHH);<br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000">    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> cout &lt;&lt; ghh &lt;&lt; endl;</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">    std::cout </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> ghh </span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000"> std::endl;<br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">11</span> <span style="COLOR: #000000">}</span></div><br /><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font color="#ff0066">体会</font>：<br />   名字空间本来就是为了解决名字冲突问题而引入，以使标准库不受外界影响。在这个意义上来说，</span><span lang="EN-US">using namespace std;</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不是可以随意使用的语句，应该考虑到它的位置对程序的可能影响，而最彻底的杜绝错误的解决办法是在任何时候任何情况下都不使用此语句！</span></p><img src ="http://www.cppblog.com/keyws/aggbug/11304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keyws/" target="_blank">keyws</a> 2006-08-16 21:09 <a href="http://www.cppblog.com/keyws/archive/2006/08/16/11304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【原】一个关于函数模版编译错误的调试记录</title><link>http://www.cppblog.com/keyws/archive/2006/08/12/11154.html</link><dc:creator>keyws</dc:creator><author>keyws</author><pubDate>Sat, 12 Aug 2006 12:32:00 GMT</pubDate><guid>http://www.cppblog.com/keyws/archive/2006/08/12/11154.html</guid><wfw:comment>http://www.cppblog.com/keyws/comments/11154.html</wfw:comment><comments>http://www.cppblog.com/keyws/archive/2006/08/12/11154.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/keyws/comments/commentRss/11154.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keyws/services/trackbacks/11154.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </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">bug”</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">让俺郁闷了一番，想了一个小时都没有想出所以然。虽求助于网络，发贴于</span>
				<span lang="EN-US">vckbase</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="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">问题已经解决，帖子摘要如下：<br /><br /></span>
		</p>
		<table class="MsoNormalTable" style="WIDTH: 100%; mso-cellspacing: 0cm; mso-padding-alt: 3.75pt 3.75pt 3.75pt 3.75pt" cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
								<td style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 3.75pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 3.75pt; BACKGROUND: whitesmoke; PADDING-BOTTOM: 3.75pt; BORDER-LEFT: #ece9d8; PADDING-TOP: 3.75pt; BORDER-BOTTOM: #ece9d8">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
												<span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">主<span lang="EN-US">      </span>题<span lang="EN-US">: </span>函数模版问题，为什么不能采用多文件方式。<span lang="EN-US"> <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" 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><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 11.25pt; HEIGHT: 11.25pt" alt="回复根帖" type="#_x0000_t75"><v:imagedata o:href="http://www.vckbase.com/bbs/image/rp2.gif" src="file:///C:\DOCUME~1\public\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></v:imagedata></v:shape><v:shape id="_x0000_i1026" style="WIDTH: 7.5pt; HEIGHT: 7.5pt" alt="" type="#_x0000_t75"><v:imagedata o:href="http://www.vckbase.com/bbs/image/rf.gif" src="file:///C:\DOCUME~1\public\LOCALS~1\Temp\msohtml1\01\clip_image002.gif"></v:imagedata></v:shape><br /></span>作<span lang="EN-US">      </span>者<span lang="EN-US">: <a href="http://www.vckbase.com/bbs/userinfo.asp?id=%B9%F9%B3%BF" target="_blank"><span lang="EN-US"><span lang="EN-US">郭晨</span></span></a> (
<script><![CDATA[
MyLevel(0)
  ]]&gt;</script></span>书童<span lang="EN-US">)<br /></span>所属论坛<span lang="EN-US">: C++ </span>论坛<span lang="EN-US"><br /></span>本帖分数<span lang="EN-US">: 0<br /></span>回复次数<span lang="EN-US">: 4<br /></span>发表时间<span lang="EN-US">: 2006-8-12 19:09:50<br /></span>正文内容<span lang="EN-US">:<br />1</span>）<span lang="EN-US"><br />#include &lt;fstream&gt;<br />#include &lt;iostream&gt;<br />using namespace std;<br />template&lt;class Type &gt;<br />Type min(Type a, Type b)<br />{<br />    return a &lt; b ? a : b;<br />}<br /><br />int main(int argc, char* argv[])<br />{<br />    cout &lt;&lt; min(10, 20) &lt;&lt; endl;<br />    return 0;<br />}<br /><br /></span>可以编译成功，运行得到正确结果。<span lang="EN-US"><br /><br />2</span>）多文件方式<span lang="EN-US"><br /><br />///////////////////////main.cxx<br />#include "min.h"<br />#include &lt;fstream&gt;<br />#include &lt;iostream&gt;<br />using namespace std;<br />int main(int argc, char* argv[])<br />{<br />    cout &lt;&lt; min(10, 20) &lt;&lt; endl;<br />    return 0;<br />}<br />///////////////////////min.h<br />#ifndef _MIN_GHH_<br />#define _MIN_GHH_  1<br /><br />template&lt;class Type &gt;<br />Type min(Type a, Type b);<br /><br />#endif<br /><br />//////////////////////min.cxx<br />#include "min.h"<br /><br />template&lt;class Type &gt;<br />Type min(Type a, Type b)<br />{<br />    return a &lt; b ? a : b;<br />}<br /><br /></span>编译报告错误：<span lang="EN-US"><br />Linking...<br />20060812_function_template.obj : error LNK2001: unresolved external symbol "int __cdecl min(int,int)" (?min@@YAHHH@Z)<br />Debug/20060812_function_template.exe : fatal error LNK1120: 1 unresolved externals<br />Error executing link.exe.<br /><br />20060812_function_template.exe - 2 error(s), 0 warning(s)<br /><br />////////////////////////////////////<br /></span>问题：为什么会出现这种问题，如何解决？盼赐教。<span lang="EN-US"><br /></span>最新修改<span lang="EN-US">:2006-8-12 19:41:10<o:p></o:p></span></span>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<table class="MsoNormalTable" style="WIDTH: 100%; mso-cellspacing: 0cm; mso-padding-alt: 0cm 0cm 0cm 0cm" cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
								<td style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 0cm; BORDER-TOP: #ece9d8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; PADDING-TOP: 0cm; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
												<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
														<o:p> </o:p>
												</span>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
						<o:p>
						</o:p>
				</span>
		</p>
		<table class="MsoNormalTable" style="WIDTH: 100%; mso-cellspacing: 0cm; mso-padding-alt: 0cm 0cm 0cm 0cm" cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
								<td style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 0cm; BORDER-TOP: #ece9d8; PADDING-LEFT: 0cm; BACKGROUND: white; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 12.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #ece9d8" width="17">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
												<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
														<o:p>
														</o:p>
												</span>
										</p>
								</td>
								<td style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 0cm; BORDER-TOP: #ece9d8; PADDING-LEFT: 0cm; BACKGROUND: #d0e6d0; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; PADDING-TOP: 0cm; BORDER-BOTTOM: #ece9d8">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
												<span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">回复人<span lang="EN-US">: <a href="http://www.vckbase.com/bbs/userinfo.asp?id=newgun" target="_blank">newgun</a> (
<script><![CDATA[
MyLevel(5)
  ]]&gt;</script></span>书童<span lang="EN-US">) <v:shape id="_x0000_i1030" style="WIDTH: 11.25pt; HEIGHT: 11.25pt" alt="回复子帖" type="#_x0000_t75"><v:imagedata o:href="http://www.vckbase.com/bbs/image/rp2.gif" src="file:///C:\DOCUME~1\public\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></v:imagedata></v:shape><o:p></o:p></span></span>
										</p>
								</td>
								<td style="BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 0cm; BORDER-TOP: #ece9d8; PADDING-LEFT: 0cm; BACKGROUND: #d0e6d0; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; PADDING-TOP: 0cm; BORDER-BOTTOM: #ece9d8">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: right; mso-pagination: widow-orphan" align="right">
												<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">2006-8-12 19:34:29 (</span>
												<span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">得分<span lang="EN-US">:</span></span>
												<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: green; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">10</span>
												<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">) <o:p></o:p></span>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left">
				<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Re:</span>
				<span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">函数模版问题，为什么不能采用多文件方式。<span lang="EN-US"><br /></span>在<span lang="EN-US">c++</span>标准中规定可以采用分离的编译模式，只需要通过在模板定义中的关键字<span lang="EN-US">template </span>之前加上关键字<span lang="EN-US">export </span>来声明一个可导出的函数模板当函数模板，被导出时我们就可以在任意程序文本文件中使用模板的实例如：<span lang="EN-US"><br />  // model2.h<br />// </span>分离模式<span lang="EN-US">: </span>只提供模板声明<span lang="EN-US"><br />template &lt;typename Type&gt; Type min( Type t1, Type t2 );<br />// model2.C<br />// the template definition<br />export template &lt;typename Type&gt;    //export</span>关键字<span lang="EN-US"><br />Type min( Type t1, Type t2 ) { /* ...*/ }<br /><br />    </span><font color="#669933">但是好像现在的好多编译器如<span lang="EN-US">vc7</span>都还不支持这种结构，所以最好把模板的声明</font><span lang="EN-US"><br /></span><font color="#669933">和定义都放在头文件里</font>。<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; PADDING-TOP: 1pt; BORDER-BOTTOM: medium none; mso-element: para-border-div; mso-border-top-alt: solid windowtext .75pt">
				<p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 0cm 0cm 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: center; mso-pagination: widow-orphan; mso-padding-alt: 1.0pt 0cm 0cm 0cm; mso-border-top-alt: solid windowtext .75pt" align="center">
				</p>
				<p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 0cm 0cm 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: center; mso-pagination: widow-orphan; mso-padding-alt: 1.0pt 0cm 0cm 0cm; mso-border-top-alt: solid windowtext .75pt" align="center">
						<span style="DISPLAY: none; FONT-SIZE: 8pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-font-kerning: 0pt; mso-bidi-font-family: Arial; mso-hide: all">
						</span>
						<span lang="EN-US" style="DISPLAY: none; FONT-SIZE: 8pt; COLOR: black; FONT-FAMILY: Arial; mso-font-kerning: 0pt; mso-hide: all">
								<o:p>
								</o:p>
						</span>
				</p>
				<span lang="EN-US">
						<span style="mso-tab-count: 1">      </span>
				</span>
				<p>
				</p>
		</div>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </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">bug</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="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </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="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>Ps</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：自己也应该考虑尝试一个新的</span>
				<span lang="EN-US">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">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">C++</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">都不纯，就象这次事件一样。</span>
		</p>
<img src ="http://www.cppblog.com/keyws/aggbug/11154.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keyws/" target="_blank">keyws</a> 2006-08-12 20:32 <a href="http://www.cppblog.com/keyws/archive/2006/08/12/11154.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>