Solved

newbie string question

Posted on 2002-05-03
12
202 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
White board coding practice 3 95
How to print into std::string like sprintf using C++11? 12 122
Need some help with mailto 16 34
visual C++ 1 9
Written by John Humphreys C++ Threading and the POSIX Library This article will cover the basic information that you need to know in order to make use of the POSIX threading library available for C and C++ on UNIX and most Linux systems.   [s…
Introduction This article is the first in a series of articles about the C/C++ Visual Studio Express debugger.  It provides a quick start guide in using the debugger. Part 2 focuses on additional topics in breakpoints.  Lastly, Part 3 focuses on th…
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

726 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