简体   繁体   中英

can not change an object's property within another object in C++

I have the following code written in C++:

#include<iostream>
#include<vector>

using namespace std;

class cViews {
    string viewName;
    double minD;
    vector<double> dss;

public:
    string minInput1, minInput2;
    cViews(string);
    cViews();
    void setName(string s) { viewName = s; }
    string getName() { return viewName; }
    void setMinI(string m) { minInput1 = m; }
    string getMinI() { return minInput1; }
    void setMinD(double d) { minD = d; }
    double getMinD() { return minD; }
    void addD(vector<double> k){ dss = k; }
    vector<double> getD(){ return dss; }
};

cViews::cViews(string str) {
  viewName = str;
  vector<double> dss = vector<double>();
}

cViews::cViews() {
  vector<double> dss = vector<double>();
}

class Obj{
  string name;
  cViews dist;
public:
  Obj(string);
  void setName(string s) { name = s; }
  string getName() { return name; }
  void addDist(cViews k){ dist = k; }
  cViews getDist(){ return dist; }
};

Obj::Obj(string str) {
  name = str;
  cViews dist();
}

void changeViewN(cViews *v, string s){
    v->setMinI(s);
}

int main(){
    Obj o1("Object1");
    cViews v3;
    cViews v1("View 1");
    v1.setMinI("View 2");
    v1.setMinD(1);
    o1.addDist(v1);
    cout << o1.getName() << " " << o1.getDist().getMinI() << endl;
    v3 = o1.getDist();
    changeViewN(&v3, "Changed");
    cout << o1.getName() << " " << o1.getDist().getMinI() << endl;
    return 0;
}

Output is:

Object1 View 2
Object1 View 2

The problem here is I am trying to change the value of an object that was created within another object.

Output should be:

Object1 View 2
Object1 Changed

Any help is greatly appreciated. Thank you.

To change the object and not a copy, ou have to use pointers or references. Else you just copy the object returned from getDist() and thus cant change the original object.

cViews* getDist(){ return &dist; }

...
changeViewN(o1.getDist(), "Changed");

It seems you got a couple of problems, the first few:

cViews::cViews(string str) {
  vector<double> dss = vector<double>();
}

viewName isn't initialized, dss is Declared in the function (which is meaningless as it will be scrapped as soon as the function returns).

ps. you would like to change the second line like this:

cout << o1.getName() << " " << o1.getDist().getMinI() << endl;

to

cout << o2.getName() << " " << o2.getDist().getMinI() << endl;

You should really proofread your code...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM