这个错误是什么意思?VC++调试错误

lovec001 2010-05-25 04:39:41
这条错误是什么意思?
c:\documents and settings\administrator\桌面\hand modeling\index.h(20) : error C2555: 'Index::Display' : overriding virtual function differs from 'Finger::Display' only by return type or calling convention
...全文
136 点赞 收藏 17
写回复
17 条回复
lovec001 2010年05月25日
[Quote=引用 14 楼 my_live_123 的回复:]
'Index::Display' : overriding virtual function differs from 'Finger::Display' only by return type or calling convention
翻译:'Index::Display' 重写虚函数的返回类型或调用约定不同于'Finger::Display' !
[/Quote]
请看16楼之回复。谢谢!!!
回复 点赞
lovec001 2010年05月25日
[Quote=引用 15 楼 lnuyasha_hrb 的回复:]
virtual Display(); 的返回值没有了啊 ,所以会报错说
不能根据返回值来重载函数
[/Quote]
/*
这么写对不,其中virtual void Display();是对Finger之虚函数Display()的重新定义。
*/
#include "Finger.h"

class Index : public Finger
{
public:
Index();
virtual ~Index();
double m_dR,m_dL1,m_dL2,m_dL3;
virtual void Display();

};
回复 点赞
lnuyasha_hrb 2010年05月25日
virtual Display(); 的返回值没有了啊 ,所以会报错说
不能根据返回值来重载函数
回复 点赞
一根烂笔头 2010年05月25日
'Index::Display' : overriding virtual function differs from 'Finger::Display' only by return type or calling convention
翻译:'Index::Display' 重写虚函数的返回类型或调用约定不同于'Finger::Display' !
回复 点赞
lovec001 2010年05月25日
[Quote=引用 12 楼 pengzhixi 的回复:]
C/C++ code

class Finger
{
public:
Finger();
virtual ~Finger();
virtual Display();//少了返回类型void

};
[/Quote]
照你的改了,好使。不过还是有2个错误,我有点看不懂:
--------------------Configuration: Hand Modeling - Win32 Debug--------------------
Linking...
Finger.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall Finger::Display(void)" (?Display@Finger@@UAEHXZ)
Debug/Hand Modeling.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

Hand Modeling.exe - 2 error(s), 0 warning(s)
回复 点赞
pengzhixi 2010年05月25日

class Finger
{
public:
Finger();
virtual ~Finger();
virtual Display();//少了返回类型void

};

回复 点赞
zhaowenzhi1234 2010年05月25日
虚函数用的不对~
回复 点赞
lovec001 2010年05月25日
[Quote=引用 8 楼 ymj7150697 的回复:]
/下面是Index的Display()函数
virtual void Index::Display()
{
//中间是绘图代码,省略之
}


去掉前边的virtual virtual只能出现在类定义中
[/Quote]
按照你的改了,五个手指,错误减了5个,但原来在第一个的错误还是照旧,没变。
回复 点赞
lovec001 2010年05月25日
[Quote=引用 8 楼 ymj7150697 的回复:]
/下面是Index的Display()函数
virtual void Index::Display()
{
//中间是绘图代码,省略之
}


去掉前边的virtual virtual只能出现在类定义中
[/Quote]请看下例:

//虚函数的实例
#include<iostream.h>
class Cshape
{ public: void SetColor( int color) { m_nColor=color;}
void virtual Display( void) { cout<<"Cshape"<<endl; }
private:
int m_nColor;
};
class Crectangle: public Cshape
{
public:
void virtual Display( void) { cout<<"Crectangle"<<endl; }
};
class Ctriangle: public Cshape
{
void virtual Display( void) { cout<<"Ctriangle"<<endl; }
};
class Cellipse :public Cshape
{
public: void virtual Display(void) { cout<<"Cellipse"<<endl;}
};
void main()
{
Cshape obShape;
Cellipse obEllipse;
Ctriangle obTriangle;
Crectangle obRectangle;
Cshape * pShape[4]=
{ &obShape, &obEllipse,&obTriangle, & obRectangle };
for( int I= 0; I< 4; I++)
pShape[I]->Display( );
}

资料来源:百度百科http://baike.baidu.com/view/161302.htm,我就是找这个做的。
回复 点赞
equalsai 2010年05月25日
/下面是Index的Display()函数
virtual void Index::Display()
{
//中间是绘图代码,省略之
}


去掉前边的virtual virtual只能出现在类定义中
回复 点赞
lovec001 2010年05月25日
[Quote=引用 5 楼 itegel84 的回复:]
覆盖的时候父类和子类的两个函数返回值或者参数类型不一致
[/Quote]

//不知道哪里出现了问题,自己检查不出来,列出源代码,以供参考:
class Index : public Finger
{
public:
Index();
virtual ~Index();
double m_dR,m_dL1,m_dL2,m_dL3;
virtual void Display(); //错误指在这行

};
//下面是Finger类
class Finger
{
public:
Finger();
virtual ~Finger();
virtual Display();

};
//下面是Index的Display()函数
virtual void Index::Display()
{
//中间是绘图代码,省略之
}
回复 点赞
yellowtree12 2010年05月25日
重载和复写有点混用了
回复 点赞
itegel84 2010年05月25日
覆盖的时候父类和子类的两个函数返回值或者参数类型不一致
回复 点赞
yaoqian156 2010年05月25日
返回类型。。。
回复 点赞
pengzhixi 2010年05月25日
如果和基类那个函数的返回类型不是继承关系,那么就是错误的。
回复 点赞
pengzhixi 2010年05月25日
你复写后的那个函数的返回类型是否有继承关系呢?
回复 点赞
昵称很不好取 2010年05月25日
重载和复写有点混用了
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告