CplusplusNewbie
CplusplusNewbie

Reputation:

C++ string in classes

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

Answers (6)

Silfverstrom
Silfverstrom

Reputation: 29348

You should refer to it as std::string;

Upvotes: 2

Abhay
Abhay

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

Twisol
Twisol

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

Ropez
Ropez

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

Kim Gr&#228;sman
Kim Gr&#228;sman

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

GManNickG
GManNickG

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

Related Questions