Reputation:
I know this is quite a ridiculous question but this is quite confusing and irritating, as something that should work simply is not. I'm using Code Blocks with the GCC compiler and I am trying to simply create a string variable in my class
#ifndef ALIEN_LANGUAGE
#define ALIEN_LANGUAGE
#include <string>
class Language
{
public:
private:
string str;
};
#endif
Strange enough, my compiler halts me with an error saying this:
C:\Documents and Settings\...|11|error: `string' does not name a type|
||=== Build finished: 1 errors, 0 warnings ===|
For some reason, it is unable to find the class "string" which for some reason, my main.cpp is able to detect "#include " while my language class is not able for some reason.
This is the main I wrote quickly just to see it main itself is able to see the string file:
//main.cpp
#include <iostream>
#include <string>
#include "alien_language.h"
using namespace std;
int main()
{
string str;
return 0;
}
Does anyone know what's going on?
Upvotes: 4
Views: 30286
Reputation: 7190
The string
class in standard C++ is in std
namespace. Write something like
using std::string;
in your header or fully qualify it as std::string in your header.
Beware that using namespace std;
in header is a bad practice (read here).
Upvotes: 0
Reputation: 2772
It looks to me like you're missing the all-important (with a hint of sarcasm) using namespace std;
line. Either add that in before your class, or explicitely use std::string str
. I'd recommend against adding the using namespace std;
line in a header file, as it would pollute the mainspace for any file that includes it.
Upvotes: 1
Reputation: 3514
The string class is defined in the std namespace. You should chenge the class to this:
class Language
{
public:
private:
std::string str;
};
It is also possible, but not recommended to add this to the top of the header file:
using namespace std;
Upvotes: 7
Reputation: 7596
string is in namespace std, and you need to qualify it fully inside your header file:
#include <string>
class Language
{
public:
private:
std::string str;
};
Do not use using namespace std;
or similar in header files.
Upvotes: 6
Reputation: 504303
using namespace std;
That's what's going on.
You don't have std::
prefixing the string in your class. Everything in the standard library is in the namespace std
.
It is generally regarded as bad practice to use using namespace std;
, by the way. For more information on why and what to do instead, check out this question: Using std Namespace.
Upvotes: 12