Solved

newbie string question

Posted on 2002-05-03
12
194 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
 
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
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
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

Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

Join & Write a Comment

What is C++ STL?: STL stands for Standard Template Library and is a part of standard C++ libraries. It contains many useful data structures (containers) and algorithms, which can spare you a lot of the time. Today we will look at the STL Vector. …
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

705 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

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now