⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_37909.htm

📁 vc
💻 HTM
字号:
<p>
序号:37909 发表者:heavenkiller 发表日期:2003-04-29 13:23:10
<br>主题:只有高手才能解决的问题!!!~!!~
<br>内容:有这样一段代码:<BR>#include &lt;typeinfo&gt;<BR>#include &lt;iostream.h&gt;<BR>class Object<BR>{<BR>protected:<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual int CompareTo (Object const&amp;) const = 0;<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual Object();<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual ~Object ();<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual bool IsNull () const;<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual int Compare (Object const&amp;) const;<BR>};<BR><BR><BR>Object::Object()<BR>&nbsp;&nbsp;&nbsp;&nbsp;{}<BR><BR>Object::~Object ()<BR>&nbsp;&nbsp;&nbsp;&nbsp;{}<BR><BR>bool Object::IsNull () const<BR>&nbsp;&nbsp;&nbsp;&nbsp;{ return false; }<BR><BR>int Object::Compare (Object const&amp; object) const<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (typeid (*this) == typeid (object))<BR>&nbsp;&nbsp;&nbsp;&nbsp;return CompareTo (object);<BR>&nbsp;&nbsp;&nbsp;&nbsp;else if (typeid (*this).before (typeid (object)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;return -1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;return 1;<BR>}<BR><BR><BR>但我在用VC6.0编译时却出现如下错误:<BR><BR>g:\data structures and algorithms\实验室\数据类型和抽象之类<BR><BR>object\object.h(17) : error C2633: 'Object' : 'inline' is the only <BR><BR>legal storage class for constructors<BR><BR>为什么会出现这种情况?Object是一个抽象基类,为什么不能构造了,“inline"为什么又和内联挂上钩呢?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:tjhe 回复日期:2003-04-29 13:32:54
<br>内容:构造函数不应该是虚函数。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:天才 回复日期:2003-04-29 14:06:38
<br>内容:多态是指在对象生成后的多态<BR>因此构造函数不可以定义为virtual<BR>这是语法
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:heavenkiller 回复日期:2003-04-29 19:07:18
<br>内容:不过编译器还出现如下错误:<BR><BR>g:\data structures and algorithms\实验室\数据类型和抽象之类object\object.h(13) : error C2011: 'Object' : 'class' type redefinition<BR><BR>!<BR>Object类怎么会是重定义了呢?请各位继续关注!!!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:枫的传说 回复日期:2003-04-30 01:10:39
<br>内容:<BR>构造函数不能声明为虚函数,但可以声明虚析构函数:<BR>&nbsp;&nbsp;&nbsp;&nbsp;因为虚函数是在对象产生之前运行的,因此虚构造函数是没意义的!<BR><BR><BR>你应该是用#include指令的嵌套使用,使得头文件object.h被包含了两次,<BR>才会编译时系统指出错误:类object被重定义!<BR><BR>解决的办法是:<BR>&nbsp;&nbsp;&nbsp;&nbsp;用一个唯一的标识符来标记某文件是否已参加过编译,<BR>如果一参加过编译,则说明该程序段是被重复包含的,<BR>编译器在编译时会忽略重复部分。<BR><BR>具体程序是:<BR><BR>//在object.h头文件中加上:<BR><BR>#if !defined(object_h)&nbsp;&nbsp; //不是object.h<BR>#define object_h<BR>#include &lt;typeinfo&gt;<BR>#include &lt;iostream.h&gt;<BR>class Object<BR>{<BR>protected:<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual int CompareTo (Object const&amp;) const = 0;<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;Object();&nbsp;&nbsp;&nbsp;&nbsp;//不能加virtual,说明如上<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual ~Object ();<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual bool IsNull () const;<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual int Compare (Object const&amp;) const;<BR>};<BR><BR>#endif<BR>//这是头文件的程序<BR><BR><BR>问题应解决了!!!<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -