You are also including the <string> header, which defines another class named std::string. It starts with "std::" because it's in the std namespace.
When you say usingnamespace std; you are telling the compiler to take everything in the std namespace and dump it into the global namespace. Thus, std::string becomes string, conflicting with your class with the same name. Hence the ambiguity errors.
The compiler is getting confused because you tell it you want a string and there are two different classes with that name.... it doesn't know which one you mean.
This is why you should avoid "using namespace std". The namespace is there to prevent this kind of thing from happening.
So if I understand what you are saying, you're telling me that I should change the name of my class to something different, drop the usingnamespace std; but when I do this I then have to put std:: in front of my cout and cin commands.
From there if I try to use the getline() I know I need to do std::getline(input) this then gives me another error so I tried adding it to look like std::getline(std:cin,input) and this give me and error saying it expects 3 arguments -2 provided.