Re: in c++ I need a pointer to a pointer ?????
On Wed, 03 May 2006 12:42:12 GMT, sparks <jstalnak@swbell.net> wrote:
Ok I am not the greatest in the world at pointers.
but I can build a linked list with no problems.
New problem is this I was parsing out some xml data
and I was trying my hand at recursion.
so to make it simple I took out all the parsing and just
did a little something to try and see if it works.
I did this
struct tree
{
string data;
tree *child;
tree *sibling;
public:
tree *Root_node;
tree(){Root_node=NULL;}
What about initializing child and sibling?
tree* add_node(tree*);
};
tree* tree::add_node(tree *root)
{
int found;
char str[120];
string ReadData();
The line above declares a global function named ReadData that returns a
string. This language "feature" should not be used.
string lineinput;
static ifstream
input_line("c:\\testproject3.txt",ios::in);//input file
while (!input_line.eof())
{
found = lineinput.find("</");
tree *node = *root;
The line above attempts to copy a tree to a tree*, which can't work.
root->data = lineinput;
if (found >0)
{
root->child=add_node(root);
root->sibling=add_node(root);
return;
}
if (found <=0)
return;
}
}
You shouldn't loop around an eof test; see this message for more:
http://groups.google.com/group/microsoft.public.vc.mfc/msg/7fa9fdb825029102
Also, I don't see where your loop reads anything. Nor do I see where it
creates any nodes. Finally, the two return statements don't return
anything, which is illegal.
=============================================
try as I might this worked but didn't.
Then I was told oh this wont work unless you use a pointer to a
pointer...something like **root.
Well I am lost and dont' know what to do this makes no since(to me)
and not sure what they are saying or how to do it.
can someone tell me what a pointer to a pointer does and if there is
something I can find to explain the syntax behind it?
A pointer is an object that contains the address of something. So a pointer
to a pointer is just an object that holds the address of a pointer. In C,
pointers are used (among other things) to simulate pass-by-reference. As
you know, for a function in C to modify the caller's object through a
function parameter, that parameter must be a pointer:
void f(int* p)
{
*p = 2;
}
void g()
{
int x;
f(&x);
assert(x == 2);
}
You can do the same thing with pointers, but you need a pointer to a
pointer:
int i;
void f(int** p)
{
*p = &i;
}
void g()
{
int* p;
f(&p);
assert(p == &i);
}
On the other hand, C++ has references, so you can use pass-by-reference:
void f(int& r)
{
r = 2;
}
void g()
{
int x;
f(x);
assert(x == 2);
}
And the pointer version looks like this:
int i;
void f(int*& r) // This & declares a reference
{
r = &i; // This & is the address-of operator
}
void g()
{
int* p;
f(p);
assert(p == &i);
}
Relating this to your example, the function add_node should probably be
declared like one of these:
tree* add_node();
void add_node(tree*& p);
You would call it like this:
t->child = add_node();
or:
add_node(t->child);
Of course, someone will have had to create t... Concerning your class
design, it would be more typical for a tree class to define a nested class
to represent its nodes.
--
Doug Harrison
Visual C++ MVP