изменение родительского обьекта С++

133
09 октября 2019, 04:50

У меня есть два обьекта в с++ , но при этом один внутри другого.

class obj_el{
    void set_a(arg){
        code...
    }
};
class obj {
    public:
    int a;
    obj_el b;
};
obj d;
d.b.set_a(arg);

При вызове последней строки нужно сделать так, чтобы d.a = arg.
Но как мне получить доступ к родительскому обьекту обьекта b?
Можго ли в обьект b передать сам d и через это изменить?

Answer 1
class obj_el{
   obj_el(obj*p){ pptr = p}
    void set_a(arg){
        p->a =arg;
    }
obj* pptr;
};
class obj {
    public:
obj():b(this){}
    int a;
    obj_el b;
};
obj d;
d.b.set_a(arg);
Answer 2

Ну, костыль присобачить можно, хотя лучше бы так не делать: https://ideone.com/qkgwT9

#include <iostream>
#include <cstddef>
using namespace std;
class obj_el {
  obj_el() {}
  friend class obj;
  public:
    void set_a(int arg);
};
class obj {
  public:
    int a;
    obj_el b;
};
void obj_el::set_a(int arg) {
  ((obj*)((char*)this - offsetof(obj, b)))->a = arg;
}
int main() {
  obj d;
  d.b.set_a(42);
  cout << d.a << endl;
  return 0;
}
READ ALSO
ERROR: Unable to find &#39;libcurl/7.50.3@lasote/stable&#39; in remotes VS 2015

ERROR: Unable to find 'libcurl/7.50.3@lasote/stable' in remotes VS 2015

Собираю либу curlppБеру пример сборки с appveyor, но не могу понять как добавить либу curl в проект

120
Масштабирование 2D камеры SDL2 C++

Масштабирование 2D камеры SDL2 C++

С перемещением камеры в мире проблем не было (просто оффсетим x и y), но систему масштабирования не знаю как сделать

102
this-&gt; или Class::?

this-> или Class::?

Возникла ситуация с конфликтом имени переменной функции и менем функции этого класса, отсюда и вопросВараинт 1:

109
Нарисовать закрашенный QPolygonF в Qt3D

Нарисовать закрашенный QPolygonF в Qt3D

У меня есть функция, которая возвращает QPolygonF, который мне нужно нарисовать и заполнить каким-нибудь цветомГугл выдал функцию отрисовки линии,...

118