I've noticed that MSVS 2005 seems to get confused when you use function names that have been defined as macros at some point prior to your declaration.
I have a hash table class that has a function called GetObject. It is very clearly GetObject in the code but 2005 is complaining about GetObjectA not being a part of HashTable.
To get around it I did this at the top of the cpp using HashTable:
Is this a bug? Shouldn't the compiler see that my GetObject() is a this call and requires an object of type HashTable and that my GetObject() is not called GetObjectA()?
This link applies to C# but I think it answers my question:
It's not a bug in the compiler but is caused by windows.h polluting the global namespace. It has a macro that turns GetObject into GetObjectA or GetObjectW.