Ich habe Probleme mit dem Bedingungsoperator, um eine Referenz auf ein Objekt zu erhalten. Ich habe die eine Einrichtung ähnlich wie diese:Bedingtes Problem mit dem Operator
class D
{
virtual void bla() = 0;
};
class D1 : public D
{
void bla() {};
};
class D2 : public D
{
void bla() {};
};
class C
{
public:
C()
{
this->d1 = new D1();
this->d2 = new D2();
}
D1& getD1() {return *d1;};
D2& getD2() {return *d2;}
private:
D1 *d1;
D2 *d2;
};
int main()
{
C c;
D& d = (rand() %2 == 0 ? c.getD1() : c.getD2());
return 0;
}
Beim Kompilieren, das gibt mir die folgende Fehlermeldung:
WOpenTest.cpp: In function 'int
main()': WOpenTest.cpp:91: error: no
match for conditional 'operator?:' in
'((((unsigned int)rand()) & 1u) == 0u)
? c.C::getD1() : c.C::getD2()'
Ich verstehe dies nach dem C illegal ++ Standard (as seen in this blog post), aber ich don weiß nicht, wie ich meine Referenz auf D
bekomme, ohne den bedingten Operator zu benutzen.
Irgendwelche Ideen?
Ja, das funktioniert perfekt. – laura
Sie brauchen auch nur einen der Casts, was den Ausdruck ein bisschen weniger ausschweifig macht. –
@Richard, ah gute Nachricht. Für mich sieht es einfacher aus, wenn ich die Umwandlung auf beide Operanden anwende, aber Sie haben natürlich recht, eine Umwandlung genügt, damit der Compiler sieht, dass die andere implizit in "D &" konvertiert werden kann. –