A commercial solution for this problem is "Understand for C/C++". It's an application that scans your complete codebase, stores all relations in an internal database, after which you can open all kinds of reports or perform queries on it. I think it has the possibility to also look for unused classes, unused methods, dead code, ...
A free solution might be to use the /VERBOSE linker option of Visual Studio. This option causes the linker to print out all object files that are included in the final executable. You can take this output, match this with all of your .CPP files, and then see which .CPP files are not included in the executable (this might require you to write a small utility, or maybe some Excel magic).