【发布时间】:2025-11-24 10:10:01
【问题描述】:
我是 C++ 新手,在解决钻石问题时我很烂: 这里是代码:
#include <iostream>
using namespace std;
// Base class
class Base
{
public:
virtual void getArea()
{
cout << "Called by Base\n";
}
};
// Derived class
class Rectangle: public virtual Base
{
public:
void getArea()
{
cout << "Called by Rectangle\n";
}
};
// Derived class
class Square: public virtual Base
{
public:
void getArea()
{
cout << "Called by Square\n";
}
};
// Derived class
class Triangle: public Rectangle, Square
{
public:
void blabla(){}
};
int main(void)
{
Triangle Tri;
Tri.getArea();
return 0;
}
我得到了 g++ 错误:
main.cpp:36:7: error: no unique final overrider for ‘virtual void Base::getArea()’ in ‘Triangle’
class Triangle: public Rectangle, Square
^
main.cpp: In function ‘int main()’:
main.cpp:45:6: error: request for member ‘getArea’ is ambiguous
Tri.getArea();
^
main.cpp:29:12: note: candidates are: virtual void Square::getArea()
void getArea()
^
main.cpp:19:12: note: virtual void Rectangle::getArea()
void getArea()
我在互联网上发现虚拟继承解决了这个问题那么我的错误是什么。
提前致谢
【问题讨论】:
标签: c++ inheritance diamond-problem