передача структуры по ссылке в c ++ не обновляет значение - PullRequest
0 голосов
/ 30 марта 2019

Я передаю структуру по ссылке на одну функцию класса treestr и сохраняю ее там в векторе.

Затем передаю ту же структуру по ссылке на другую функцию и выполняю некоторые вычисления над данными-членами структуры.,Этот элемент данных обновляется в исходной структуре, но не в тех, которые хранятся в векторе.

(извините за любые ошибки, плохо знакомые с c ++, плохо знакомые с переполнением стека).Пожалуйста, помогите.

//Structure description
Struct point{
int x;
int y;
int cal{0};

};

Struct node{

    point p;
    int data; //value to be updated by func

};

int main(){

    treestr * tree= new treestr(); //create object
    int i=0,n=100;
    vector<node> nob;
    while(i<=n){
        p={1,5}; //some values input by user
        node n={p,i};
        nob.push_back(n)//storing the struct node objects seperately in a 
                         //vector
        treestr->insert(n);  //inserting into tree class
        i++;
        }
    //calling func to do some computation on the struct objects inserted
    for(i=0;i<n;i++){
        int x=tree->func(nob[i]);
        cout<<x.cal; //getting updated values from the function
        }

    for(i=0;i<N;i++){
        tree->func2(nob[i]);
    }
    return 0;
}

//class description
class treestr{
    vector<node> buck; 
    insert(node& n){
        buck.push_back(n);
        //store nodes
    }

    func(node& n){
        //calculations
        return n.cal; Value got updated in main.
    }
    func2(node &n){
        int val1=n.cal; //this assigns updated value
        int val2=buck[i].p.cal; //this assigns 0(default value)
        if(val1==val2){ //never matches, val2 is 0 for all objects, val1 is 
                           //not after getting updated
        //do something
         }
    }

};

Cal обновляется в основной функции, но не в классе, где я хранил.Пожалуйста, игнорируйте грамматические и синтаксические ошибки, код возвращает правильный вывод, но это то, что мне нужно, чтобы улучшить мой код.

Любые возможные причины ??

1 Ответ

0 голосов
/ 30 марта 2019

Попробуйте изменить node n={1,5,0}

до

node * n;
node -> x = 1;
node -> y = 5;
node -> cal = 0;

Из того, что я знаю об указателях, вам нужно назначать каждое значение индивидуально. Также

tree->insert(n)

должно быть

tree.insert(n)

Другое дело

int node.cal=tree->func(n);

Не уверен, что это должно делать, но я знаю, что это не сработает. 'int' должен быть перед именем переменной. При доступе к cal из node ваш вызов должен быть ->, а при доступе к func из tree это должен быть .

...