Solved

newbie string question

Posted on 2002-05-03
12
201 Views
Last Modified: 2010-04-02
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
0
Comment
Question by:vlg
  • 7
  • 5
12 Comments
 
LVL 30

Expert Comment

by:Axter
ID: 6988761
"this" is a language keyword.

Change the name to something else besides "this"
0
 
LVL 30

Expert Comment

by:Axter
ID: 6988762
Also your return types don't match.
0
 
LVL 30

Expert Comment

by:Axter
ID: 6988765
You're also missing a simicolon at the end of your class declaration.
0
ScreenConnect 6.0 Free Trial

Want empowering updates? You're in the right place! Discover new features in ScreenConnect 6.0, based on partner feedback, to keep you business operating smoothly and optimally (the way it should be). Explore all of the extras and enhancements for yourself!

 
LVL 30

Expert Comment

by:Axter
ID: 6988772
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
 
LVL 30

Expert Comment

by:Axter
ID: 6988792
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
 

Author Comment

by:vlg
ID: 6988964
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
 
LVL 30

Accepted Solution

by:
Axter earned 100 total points
ID: 6989048
>>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
 

Author Comment

by:vlg
ID: 6989134
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
 

Author Comment

by:vlg
ID: 6989142
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
 

Author Comment

by:vlg
ID: 6989147
oops - ignore that last request for a repost - my bad
only the question about the inclusion remains.

v
0
 

Author Comment

by:vlg
ID: 6989314
if you have the time - i'm stil curious about the question...
but thanks in any event!
0
 
LVL 30

Expert Comment

by:Axter
ID: 6989377
>>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

Featured Post

Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

When writing generic code, using template meta-programming techniques, it is sometimes useful to know if a type is convertible to another type. A good example of when this might be is if you are writing diagnostic instrumentation for code to generat…
Introduction This article is a continuation of the C/C++ Visual Studio Express debugger series. Part 1 provided a quick start guide in using the debugger. Part 2 focused on additional topics in breakpoints. As your assignments become a little more …
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question