user461127
user461127

Reputation: 101

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.

Upvotes: 0

Views: 1270

Answers (2)

Valmond
Valmond

Reputation: 2969

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 ...

Upvotes: 0

marc
marc

Reputation: 6223

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");

Upvotes: 3

Related Questions