Hy all. I have this code, done it so, because it is a school project, so I am forced to use this things ...
Anyway, I don't understand what its wrong
Here is the code:
//this is valuta.h:
//this is valuta.cpp:Code:typedef void* cheie; typedef void* valoare; typedef int (*FunCmp)(cheie a, cheie b); struct _Tabel; typedef _Tabel* Tabel; struct _Tabel{ cheie valuta[10]; valoare lei[10]; int dim; FunCmp FC; }; void creaza(Tabel& t, FunCmp f); valoare insereaza(Tabel &t, cheie c, valoare v); valoare cauta(Tabel& t,cheie c);
// and finally this is the main program, hereCode:#include <iostream.h> #include "valuta.h" void creaza(Tabel& t, FunCmp f){ t=new _Tabel; t->dim=-1; } valoare cauta(Tabel& t, cheie c){ while(t->dim>=0) { int i=t->dim; cout<<"t->dim: "<<t->dim<<" value:"<<(*(int*)t->lei[i])<<endl; //here is the big problem ... i //guess that t->lei[i] point to the //start off the array, but how can I //make it to point to each element ? :-/ t->dim--; //in this moment this code just prints //the last value for t->dim times ... } return 0; } //this is were I populate my struct ... valoare insereaza(Tabel& t, cheie c, valoare v){ t->dim++; t->valuta[t->dim]=c; t->lei[t->dim]=v; cout<<"t->dim:"<<t->dim<<endl; cout<<(char*)t->valuta[t->dim]; cout<<" "<<(*(int *)t->lei[t->dim])<<endl; return v; }
//I create values and call the inserting function...
//I also call "cauta" wich should search for a value ...
//but you can see that is not working ...
If I cout with:Code:#include "valuta.h" #include <iostream.h> void main(){ Tabel t; FunCmp Fc; creaza(t, Fc); char val[10]; int *plei; int lei; int nrval; cout<<"Cate valori ? (Maxim 10) ";//the number of values cin>>nrval; for (int i=0;i<nrval;i++){ cout<<"Valuta dorita:";//one value, a string cin>>val; cout<<endl; cout<<"Valoarea in lei:";//another value, an int cin>>lei; cout<<endl; plei=&lei; insereaza(t, &val, plei); } cauta(t,val); }
cout <<"t->dim: " <<t->dim <<" value:" <<t->lei[t->dim]
it prints a memory address (the same )for 3 times (suposing t->dim = 3).
If I cout with:
cout <<"t->dim: " <<t->dim <<" value:" <<(*(int*)t->lei[i]) <<endl; //insteed of "i" I also may put t->dim, the result its
//the same
it prints the LAST value entered 3 times (suposing t->dim =3)
Is not this the problem, in first case it prints an adrress because t->lei[t->dim] (or t->lei[i]) is a pointer to struct.
In the second case it prints the value because the present of the dereference operator. Still in this case I don't understand why I can't wrote (*(int)t->lei[i]) because, its make sense for me. I cast to int, and I want to print the data from that location of memory ... Wright ? The compiler says: illegal indirection, but I don't really understand why ...
So how can I make things that I can print the data from every element ?
Any idea will be greatly apreciated ! Thank you!



LinkBack URL
About LinkBacks


