On Oct 31, 1:35 am, Dwight Army of Champions
<dwightarmyofchampi...@hotmail.com> wrote:
Hello! Suppose I have two derived classes Car and Bicycle that
derive from a base class Vehicle and an integer x. Why does the
following code give an "operand types are incompatible" error...
Vehicle* AnyVehicle = (x % 2 == 0) ? new Car() : new Bicycle();
...but the following code, which utilizes a simple if statement
to do exactly the same thing, compiles successfully?
Vehicle* AnyVehicle;
if (x % 2 == 0) {
AnyVehicle = new Car();}
else {
AnyVehicle = new Bicycle();
}
Is it even possible to initialize these objects with the ternary
operator?
The problem is, in "left : right" part of the ternary, you have two
unrelated types as far as the compiler is concerned. It tries to
deduct a type for that part, and does not try upcasting (note that
upcasting can get pretty messy if attempted on a more complicated
derivation case). You can use static_cast<Vehicle*> on any side to
work-around. The fact that you have Vehicle on the left does not
matter, as usual conversion rules are being applied on the "="
boundary, so the right side of "=" is done in on it's own.
Goran.
Could you please explain it in bit more detail. I m still confused