可能重复:
在C++中覆盖虚函数时可以更改返回类型吗?
我收到错误:
error: conflicting return type specified for âvirtual bool D::Show()
7: error: overriding âvirtual void A::Show()"
Run Code Online (Sandbox Code Playgroud)
当我编译我的代码.代码是:
class A
{
public:
virtual void Show()
{
std::cout<<"\n Class A Show\n";
}
};
class B : public A
{
public:
void Show(int i)
{
std::cout<<"\n Class B Show\n";
}
};
class C
{
public:
virtual bool Show()=0;
};
class D :public C, public B
{
public:
bool Show(){
std::cout<<"\n child Show\n";
return true;}
};
int main()
{
D d;
d.Show();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想使用C语言中的Show()函数.我的错误在哪里?
您的编译器抱怨,因为这两个函数没有相同的返回类型:其中一个返回a void而另一个返回a bool.您的两个函数应具有相同的返回类型.
你应该有
class A {
public:
virtual bool Show() {
std::cout<<"\n Class A Show\n";
return true; // You then ignore this return value
}
};
class B : public A {
public:
bool Show(int i) {
std::cout<<"\n Class B Show\n";
return true; // You then ignore this return value
}
};
Run Code Online (Sandbox Code Playgroud)
如果你不能改变类A和B,您可以更改类C和D有一个void Show()方法,而不是一个bool Show()方法.
如果你不能做任何这些事情,你可以使用组合而不是继承:B在你的D函数中有一个类型的成员而不是继承它:
class D : public C {
public:
bool Show() {
std::cout<<"\n child Show\n";
return true;
}
void ShowB() {
b.Show();
}
private:
B b;
};
Run Code Online (Sandbox Code Playgroud)