не может изменить свойство объекта в другом объекте в C ++ - PullRequest
0 голосов
/ 17 июля 2011

У меня есть следующий код, написанный на 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;
}

Вывод:

Object1 View 2
Object1 View 2

Проблема здесь в том, что я пытаюсь изменить значение объекта, который был созданв другом объекте.

Вывод должен быть:

Object1 View 2
Object1 Changed

Любая помощь очень ценится.Спасибо.

Ответы [ 2 ]

3 голосов
/ 17 июля 2011

Чтобы изменить объект, а не копию, нужно использовать указатели или ссылки. В противном случае вы просто копируете объект, возвращенный из getDist(), и, таким образом, не можете изменить исходный объект.

cViews* getDist(){ return &dist; }

...
changeViewN(o1.getDist(), "Changed");
0 голосов
/ 17 июля 2011

Кажется, у вас есть пара проблем, первые несколько:

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

viewName не инициализировано, в функции объявлено dss (что бессмысленно, так как будет удалено, как только функция вернется)

пс. Вы хотели бы изменить вторую строку следующим образом:

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

до

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

Вы должны действительно вычитать свой код ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...