I'd suggest storing the objects themselves elsewhere, and keeping a void * pointer to the object inside the node. Functions which operate on nodes would cast the void * to the appropriate type based on the value of iType.
This is basic polymorphism, which is much easier to handle in C++ than in C.