If I change those lines to use dynamic_cast the error disappears and the application runs properly.
I'm betting that you aren't getting a valid pointer to a QgsVectorLayer instance when you do this, but you're lucky because whatever is using this pointer is probably checking for a NULL pointer before trying to dereference it.

The reason why qobject_cast causes link errors is that, unlike dynamic_cast, it is actually checking to see that the pointer *really does* point to a QgsVectorLayer instance, and to do that it needs the Qt meta-object system to be in place and working for it.

So, do like tescrin and I have suggested: Check the Visual Studio properties for the project and make sure your libraries *are* being linked in. Change the cast back to qobject_cast.