Export (0) Print
Expand All
Expand Minimize

Compiler Warning (level 1) C4540

dynamic_cast used to convert to inaccessible or ambiguous base; run-time test will fail ('type1' to 'type2')

You used dynamic_cast to convert from one type to another. The compiler determined that the cast would always fail (return NULL) because a base class is inaccessible (private, for instance) or ambiguous (appears more than once in the class hierarchy, for instance).

The following shows an example of this warning. Class D is derived from class B. The program uses dynamic_cast to cast from class D (the derived class) to class B, which will always fail because class B is private and thus inaccessible. Changing the access on B to public will fix the problem.

// C4540.cpp
// compile with: /W1 /GR
class B
{
   virtual void g()
   {
   }
};

class D : private B
{
};

int main()
{
   D d;
   B* bp;
   bp = dynamic_cast<B*>(&d);   // C4540
}
Show:
© 2015 Microsoft