I have many times struggled with Visual Studio compile problems. Most difficult problems to solve are problems which seemingly don't have any reason! For example the intellisense is showing return type string, but you know the return value is int.
The reason is that intellisense is storing data from old headers, and for some reason is not clearing it's database, but keeps giving you (and compiler) wrong information.
The solution is simple, simply remove the file $solutionname.ncb from your solution folder.
Note: you need to close your solution first!