【发布时间】:2017-08-08 08:06:29
【问题描述】:
我有如下代码,但我不明白为什么编译器无法准确推断创建 D 类实例时要使用的构造函数。 我已经删除了复制和移动构造函数,所以唯一的选择是使用 A(Base&)
除了将 *this 强制转换为 Base& 之外,还有什么方法可以告诉编译器使用 A(Base&) 构造函数。
class Base {};
class A
{
private:
Base& m_b;
public:
A(Base& b) :m_b(b) {}
A(const A&) = delete;
A(A&&) = delete;
};
class D : public Base, public A
{
public:
D():A(*this){}
};
int main()
{
D();
}
我得到的错误如下:
main.cpp: In constructor 'D::D()':
main.cpp:17:16: error: call of overloaded 'A(D&)' is ambiguous
D():A(*this){}
^
main.cpp:10:5: note: candidate: A::A(const A&) <deleted>
A(const A&) = delete;
^
main.cpp:9:5: note: candidate: A::A(Base&)
A(Base& b) :m_b(b) {}
【问题讨论】:
标签: c++ constructor casting operator-overloading ambiguity