J'ai un code comme ci-dessous et je ne comprends pas pourquoi exactement le compilateur ne peut pas déduire le constructeur à utiliser quand l'instance de classe D est créée. J'ai supprimé à la fois copier et déplacer constructeur de sorte que la seule alternative serait d'utiliser une (base &)Comment faire pour compilateur savoir quelle surcharge d'une fonction appeler pour éviter toute ambiguïté?
Est-ce il y a une façon de dire compilateur d'utiliser A (base &) constructeur, en plus de coulée * ce à la 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();
}
L'erreur que je reçois est la suivante:
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) {}