C++ string in classes

24,692

Solution 1

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.

Solution 2

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;

Solution 3

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.

Solution 4

You should refer to it as std::string;

Solution 5

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.

Share:
24,692
Admin
Author by

Admin

Updated on September 03, 2020

Comments

  • Admin
    Admin over 3 years

    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?

  • Admin
    Admin over 14 years
    Thank you, I've completely forgot that string the std:: prefixing, I'm used to not putting using namespace std; in my class files, but doing so in my main.cpp
  • sbi
    sbi over 14 years
    Ah, someone not recommending using namespace std;! +1
  • Mogi
    Mogi almost 4 years
    why not to using namespace std; in header files?
  • Mogi
    Mogi almost 4 years
    nevermind, find the appropriate answer after googling: cplusplus.com/forum/beginner/25538 leaving these comments for future confusions