在c++中出现菱形问题的情况下,如果基础类和中级类实现了虚拟函数。如何删除给定的错误?
#include <iostream>
using namespace std;
class Base
{
public:
virtual void display()
{
cout<<"In Base"<<endl;
}
};
class Der1:virtual public Base
{
public:
void display()
{
cout<<"In Der1"<<endl;
}
};
class Der2:virtual public Base
{
public:
void display()
{
cout<<"In Der2"<<endl;
}
};
class Mix: public Der1, public Der2
{
};
int main()
{
cout << "Hello World!" << endl;
Mix m_mix;
m_mix.display();
return 0;
}我得到下面的错误:-
main.cpp:50:错误:成员'display‘的请求不明确m_mix.display();
如何使用Mix类的对象访问Der1和Der2的display()?
发布于 2014-11-03 20:35:07
要解决歧义,可以显式指定函数,例如:
m_mix.Der1::display();发布于 2014-11-03 20:36:11
首先,您的代码中没有virtual函数。但如果有也没关系。(更新:想想看,如果display()是虚的,那么Mix作为一个类是不会编译的,因为你会把哪个函数放在vtable中?你甚至没有调用display()就会得到一个错误)。
当您调用Mix::display()时,有两个选择:Der1::display()和Der2::display()。编译器不可能区分它们,所以它不会试图猜测你想要什么,而是告诉你它不能。所以你只需要明确地说:
m_mix.Der1::display();或
static_cast<Der1&>(m_mix).display();或者编写一个Mix::display()函数,它可以做任何你想做的事情。
发布于 2014-11-03 20:40:52
像这样调用:-
m_mix.Der1::display ();或
m_mix.Der2::display ();https://stackoverflow.com/questions/26714446
复制相似问题