As a style, always program to an interface.
The header files for those interfaces absolutely should not include headers like <string>. An interface does not require it.
Then how do you use std::string in your class declaration?
I don't think we should forward declare symbols in third party or even system libraries.