Warnings about inconsistent struct/class declarations.

Some types were forward-declared as class but are then declared as
struct. Clang complains about the inconsistency.
Warning about overloaded virtual methods hiding inherited ones.

Clang complains about some overriding methods hiding inherited
overloaded versions. Defining the overloaded methods in the derived
classes as well solves the issue.
Warning about '< 0' check on unsigned variable.

Wether the variable shouldn't be unsigned or the condition
is useless.