String literals as char arrays
When a C or C-related programmer sees char* they're going to naturally think of passing in a C-string. In my opinion, it's absolutely fine to do that. If you want to invoke an array of characters in C, I'd do it like this:

char ConsoleIO::GetNextChar(string prompt, char[] choices, int numChoices)


But, you're in C++ so you should use a std::vector&lt;char&gt; and then don't pass in numChoices, like this:

char ConsoleIO::GetNextChar(string prompt, std::vector&lt;char&gt; const&amp; choices)


Also, you have a bug. You aren't ever deleteing buffer, which means it's leaking.