Доступ к информации объекта 1 класса объектом 2 класса

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ну вот в общем код. Компилируется, но похоже неправильно работает. Или я чего-то не вижу. Прошу помочь.

class qw_a{
  public:
   int intA10; // Создаем 1 класс и переменную в нем
   qw_a(){intA10 = 10;};
};
class qw_b{
  public:
    qw_b(qw_a Object); // Создаем 2 класс и указатель на объект построеный на основе 1 класса
    qw_a * q_Object;
    void func();//  создаем функцию , которая добывает информацию из объекта 1 класс
};
qw_b::qw_b(qw_a Object){
    q_Object = & Object; 
}
void qw_b::func(){
  Serial.println(q_Object->intA10);
}
//=== программа ====
qw_a ObjectA;
qw_b ObjectB(ObjectA);
void setup() {
    Serial.begin(9600);
 ObjectB.func();   // понятно что в мониторе должно быть 10. Но почему-то другое число. 
}
void loop() {
 }

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Код работает в точности так, как написан.

PS. Честно говоря, C\C++ не мой родной язык, поэтому могу и напутать, но я бы передавал параметром не сам объект, а его адрес. В обычном случае при передаче по значению в подпрограмму передается копия объекта, а не он сам.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Пожалуста напиши код. Но только рабочий. Для меня C\C++ тоже как "не родной".  А тот что "родной" уже давно морально устарел.

 

Вот немного переделал. Похоже указатель на представителя класса компилятор Ардуины не правильно создает.

class qw_a{
  public:
   int AAA; // Создаем 1 класс и переменную в нем
   qw_a(){AAA = 1;};
};
class qw_b{
  public:
    qw_b(qw_a * Object); // Создаем 2 класс и указатель на объект построеный на основе 1 класса
    qw_a * q_Object;
    void func();//  создаем функцию , которая добывает информацию из объекта 1 класс
};
qw_b::qw_b(qw_a * Object){
    q_Object =  Object; 
}
void qw_b::func(){
  int A = (q_Object->AAA);
  Serial.println(A);
}
//=== программа ====
qw_a ObjectA;
qw_a * p_ObjectA;
qw_b ObjectB(p_ObjectA);
void setup() {
    Serial.begin(9600);
 ObjectB.func();   // понятно что в мониторе должно быть 1. Но почему-то другое число. 
}
void loop() {
 }

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

В строке 21 Вы создаете указатель, но не инициализируете его. А потом этот пустрой указатель пытаетесь передать qw_b.

Думаю, строку 21 нужно удалить, а следующую строку записать так:

qw_b ObjectB(&ObjectA);

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Спасибо. Похоже работает.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

qwone пишет:

компилятор Ардуины не правильно создает

Вы так больше никогда и никому не говорите, пожалуйста.