Writing the string declaration as std:string also works fine. What's the difference.
The difference would be slight clearer if you formatted it differently:
std:
string c = "Test";
You're declaring a label called std
, and using the name string
which has been dumped into the global namespace by using namespace std;
. Writing it correctly as std::string
, you're using the name string
from the std
namespace.
If I use this
std::string
within a class to declare a private variable, I get an error error:‘std’ does not name a type.
That's because you can't put a label in a class definition, only in a code block. You'll have to write it correctly as std::string
there. (If the class is defined in a header, then using namespace std
is an even worse idea than in a source file, so I urge you not to do that.)
Also, if you're using std::string
, then you should #include <string>
. It looks like your code works by accident due to <iostream>
pulling in more definitions than it need to, but you can't portably rely on that.