📄 subject_37909.htm
字号:
<p>
序号:37909 发表者:heavenkiller 发表日期:2003-04-29 13:23:10
<br>主题:只有高手才能解决的问题!!!~!!~
<br>内容:有这样一段代码:<BR>#include <typeinfo><BR>#include <iostream.h><BR>class Object<BR>{<BR>protected:<BR> virtual int CompareTo (Object const&) const = 0;<BR>public:<BR> virtual Object();<BR> virtual ~Object ();<BR> virtual bool IsNull () const;<BR> virtual int Compare (Object const&) const;<BR>};<BR><BR><BR>Object::Object()<BR> {}<BR><BR>Object::~Object ()<BR> {}<BR><BR>bool Object::IsNull () const<BR> { return false; }<BR><BR>int Object::Compare (Object const& object) const<BR>{<BR> if (typeid (*this) == typeid (object))<BR> return CompareTo (object);<BR> else if (typeid (*this).before (typeid (object)))<BR> return -1;<BR> else<BR> 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> 因为虚函数是在对象产生之前运行的,因此虚构造函数是没意义的!<BR><BR><BR>你应该是用#include指令的嵌套使用,使得头文件object.h被包含了两次,<BR>才会编译时系统指出错误:类object被重定义!<BR><BR>解决的办法是:<BR> 用一个唯一的标识符来标记某文件是否已参加过编译,<BR>如果一参加过编译,则说明该程序段是被重复包含的,<BR>编译器在编译时会忽略重复部分。<BR><BR>具体程序是:<BR><BR>//在object.h头文件中加上:<BR><BR>#if !defined(object_h) //不是object.h<BR>#define object_h<BR>#include <typeinfo><BR>#include <iostream.h><BR>class Object<BR>{<BR>protected:<BR> virtual int CompareTo (Object const&) const = 0;<BR>public:<BR> Object(); //不能加virtual,说明如上<BR> virtual ~Object ();<BR> virtual bool IsNull () const;<BR> virtual int Compare (Object const&) 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 + -