In mlevel.h, getmlevel needs to return some sort of value (void or otherwise) - it returns an int in the CPP
It's also probably a good idea to put private things first, since classes are by default private; the way you have it is the reverse of the way it's coded in any other program.
Why is Mlevel numbered? It only declares a class type, not an instance, to do that you need to use
Mlevel Mlevel1;
or declare the name after the } and before the ; in the class definition.
When you're checking for a null pointer, if(pFirst == 0) should be if(pFilrst == NULL), it is considered bad practice to assume null pointers are 0; although they are on Win32 and Linux, I believe.
You can only have one linked list class instance in your entire program, though. All the items will be added to one big list because of the *pFirst pointer being static.
You should probably just use vectors, a linked list just adds complexity for speed, and speed isn't going to be a factor here since it's an external program / utility instead of an actual gameplay element.
A final word, you should probably make it possible to call the main mission-generating function from outside the program, so that it could be used as a plugin to FRED or something.
Edit: Oh yeah, don't ever name functions the same as pointers. It'll confuse the compiler because it won't be able to tell if you're talking about the variable with that name or trying to use a pointer to the function.