newbie string question

Hello all
I'm trying to use strings because I feel more comfortable with them - char* stuff is still a bit of a mystery.
This is using g++ no a Unix box.
Anyways, I have a header file - this.h:
#ifndef THIS
#define THIS

class x
{
   public:
     bool this();
     int that(int);
     string theOther(string);  //call this line 5
     bool someThing(string);   //line 6
}
#endif

and a .cc file - this.cc:
#include <string.h>
#include "this.h"

string this::theOther(string str)   //call this line 7
{
   //...
}

when I try to compile this.cc, the compiler says
this.h:5: syntax error before '('
this.h:6: 'string' was not declared in this scope
this.h:6: invalid data member initialization
this.h:6: use '=' to initialize static data members
this.cc:7: syntax error before '::'

Why all the grief about strings?
I even tried adding #include <string.h> to the .h file, but that didn't help.  
The points go to whomever can tell me how to get strings working in this context.
Thanks

v
vlgAsked:
Who is Participating?
 
AxterConnect With a Mentor Commented:
>>when I #include<string> at the top of the file?
>>What good is including the file doing for me?

If you have the include<string> in the header (*.h), then you don't need it in the *.cpp file.

I'm not exactly sure if that answers your question.  If not, please restate the question.
0
 
AxterCommented:
"this" is a language keyword.

Change the name to something else besides "this"
0
 
AxterCommented:
Also your return types don't match.
0
Cloud Class® Course: Amazon Web Services - Basic

Are you thinking about creating an Amazon Web Services account for your business? Not sure where to start? In this course you’ll get an overview of the history of AWS and take a tour of their user interface.

 
AxterCommented:
You're also missing a simicolon at the end of your class declaration.
0
 
AxterCommented:
For starters, here how you can setup your header.

#ifndef MY_HEADER_GAURD_FOR_X_CLASS
#define MY_HEADER_GAURD_FOR_X_CLASS

#include <string>  //Link to <string> and NOT <string.h>

class x
{
public:
    bool SomeNameOtherThenThis();
    int that(int);
     std::string theOther(std::string);  //Use std:: namespace when using stl code in header
    bool someThing(std::string);   //Use std:: namespace when using stl code in header
};

#endif //MY_HEADER_GAURD_FOR_X_CLASS
0
 
AxterCommented:
continue ....

#include <string> //Use <string> instead of <string.h>
#include "my_header.h"

std::string x::theOther(std::string str)//change "this" to x
{
  //...
     return "";
}
0
 
vlgAuthor Commented:
Axter -

Thanks for the help.
One quick question:
you said that in the .cc file I also have to:
std::string x::theOther(std::string str)//change "this" to x
{
 //...
    return "";
}
even though I'm including the library file:
#include <string> //Use <string> instead of <string.h>
?
I'm obviously going to follow the rules, but I'm curious as to why I have to use
std::string x::someFunction(std::string str)
when I #include<string> at the top of the file?
What good is including the file doing for me?

v
0
 
vlgAuthor Commented:
close -
what I meant was, if I'm #including it in the header file, then:
1) why does it also (as in your example above) also have to be in the .cc file, and if it is in either/both places, why do I still have to preface all the string stuff with "std::"?

that's the only thing - I'm just curious - the points will be yours whether you know the answer or not, so no need to make something up if you don't know - just curious

thanks

v
0
 
vlgAuthor Commented:
weird - now I can't see that comment you added about having to check the string length or something with stol(?) - it was similar to the comment posted by the other person - and I can't see his comment now, either!

Yikes - can you please repost it, Axter? - I'll never figure out what you were talking about without that comment.
thanks
0
 
vlgAuthor Commented:
oops - ignore that last request for a repost - my bad
only the question about the inclusion remains.

v
0
 
vlgAuthor Commented:
if you have the time - i'm stil curious about the question...
but thanks in any event!
0
 
AxterCommented:
>>why does it also (as in your example above) also have to be in the .c

It doesn't need to be in both.  You can just keep it in the *.h file.

>>why do I still have to preface all the string stuff
>>with "std::"?

You need the prefix because it's in the std namespace.

If you don't want to use the prefix you can use a using-statement.
Example:
using namespace std;

But I don't recommend that you do this in the header.  Only in the *.cpp file.

You should always avoid bring a namespace into the gobal area in the header, because this conficts with the author's intentions.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.