Hi,
it's a (questionable) design choice. I wouldn't have done in this way, but it works. As a consequence, it's just a choice.
All the OLSR headers are the very same header class. The m_messageType variable decides what header kind is for real.
When you create a header, its type is zero. When you "use" it for the first time as a particular header its type is written into m_messageType and never changed again (quite logical).
As I said, I wouldn't have done this, but it works.
Cheers,
T.