Questo codice:tipi di operando incompatibili quando si utilizza ternario operatore condizionale
bool contains = std::find(indexes.begin(), indexes.end(), i) != indexes.end();
CardAbility* cardAbility = contains ? new CardAbilityBurn(i) : new CardAbilityEmpty;
mi dà il seguente errore:
Incompatible operand types CardAbilityBurn and CardAbilityEmpty
Tuttavia se scrivo il codice come questo:
if (contains)
{
cardAbility = new CardAbilityBurn(i);
}
else
{
cardAbility = new CardAbilityEmpty;
}
quindi il compilatore non si preoccupa. Perchè così? Voglio usare l'operatore condizionale ternario perché è solo una riga. Cosa c'è che non va?
Ho bisogno di notare (penso che potrebbe essere necessario questa informazione) che CardAbilityEmpty
e CardAbilityBurn
entrambi derivano da CardAbility
quindi sono per così dire fratelli.
Grazie
Essenzialmente lo stesso problema di http://stackoverflow.com/questions/24706480. La soluzione più semplice è convertire esplicitamente uno di questi in 'CardAbility *'. –
Domanda davvero interessante. –
Quale compilatore usi? Su VS2008 funziona con classi derivate. –