class member function and private member problem

hi
I'm trying to create a member function of a class which takes a variable of the class type and uses its values to output a string. heres my constructor:
1
2
3
4
5
6
7
8
9
10
Intclass::Intclass(int x)
    {
    vector <int> val;
    int i = 0;
    while(x != 0)
        {
        val.push_back( x%10 );
        x /= 10;
        }
    }

this takes an int and puts it into a vector (units, tens etc..), which seems to work fine.
Having created a variable of type Intclass with some numbers in I then want to have a member function which will output them as a string which I've written like this:
1
2
3
4
5
6
7
8
9
string Intclass::st() const
    {
    string s;
    for (int i = 0; i < val.size(); ++i){        
        s.push_back( val[i] );
        }
    cout << s << val.size();
    return s;
    }

when I then try using the function (b.st(); where b is the variable) it doesn't output anything and cout's val.size() as being '0' if I try to access elements of val[] I go out of bounds, and get a segmentation fault, as it seems to no longer exist.
what I'm confused about is what happened to the private member of my variable of type Intclass, val, which was where my list of numbers is stored, and is there a problem with my constructor? or am I trying to access the private member incorrectly? why is my vector now apparently empty? and zero elements long?

thanks in advance for any help. I feel like i've missed something quite basic about how to use classes although for the life of me I can't see what I've done differently from other examples which seem to pass these values around fine.
1
2
3
4
5
6
7
8
9
10
Intclass::Intclass(int x)
    {
    vector <int> val; //local variable
    int i = 0;
    while(x != 0)
        {
        val.push_back( x%10 ); //affect local variable
        x /= 10;
        }
    }//local variable dies 
Last edited on
I see, so my constructors are not constructing anything??

I also have a 'vector <int> val;' in my private: part of my class declaration, so I'm both declaring something called 'val' twice and my functions are naturally using the closest one, which is the local variable.
I hope that I've now got this right in my head.

so if I get rid of the local variable declaration it will use the variable who's scope exists privately throughout the class. thank you, ne555, so much for you quick and clear reply.
Topic archived. No new replies allowed.