Как установить значение в константе в структуру c

#c #pointers #struct #constants

#c #указатели #struct #константы

Вопрос:

Я не могу присвоить значение константе внутри структуры, следуйте коду:

 #include <iostream>
#include <stdio.h>

typedef struct
{
  float a;
  float b;
  float c;
  float intensity;
} PointXYZI;

typedef struct structParent{
  int x;
  int y;
  const PointXYZI* xyzi;
} structParent;

int main()
{

  float o = 10.f, p = 5.0f, z = 96.0f;

  PointXYZI points = {o, p, z};

  const structParent *data = {0,0, amp;points};

  std::cout << " *-* " << data.xyzi->c << std::endl;
  std::cout << " *-* " << points.a << std::endl;


  return 0;
}
  

Я получаю следующую ошибку с этим кодом:

ошибка: скалярному объекту ‘data’ требуется один элемент в инициализаторе const structParent *data = {0,0, amp;points};

Спасибо…

Комментарии:

1. const structParent *data это указатель — вам, вероятно, нужен просто объект const structParent data

2. Да, но я должен использовать данные в качестве указателя в функции

3. Вы могли бы использовать оператор address-of для передачи его в функцию ( amp;data ) — точно так же, как вы делаете с points . Или, если вы настаиваете на сохранении его в виде необработанного указателя, вы должны создать объект, используя new structParent

4. Следуйте функции someFunction(const dwLidarDecodedPacket* packet, dwLidarAccumulatorHandle_t obj);

5. Я не знаю, что вы пытаетесь сказать этим комментарием

Ответ №1:

Поясняемая примером версия ответа @UnholySheep заключается в следующем.

 void someFunc(const structParent amp;x)
//                             ^^^^^^
{
  std::cout << " @_@ " << x.xyzi->c << std::endl;
}

int main()
{

  float o = 10.f, p = 5.0f, z = 96.0f;

  PointXYZI points = {o, p, z, 0};
  //                        ^^^^^
  const structParent data = {0,0, amp;points};
  //                ^^^
  std::cout << " *-* " << data.xyzi->c << std::endl;
  std::cout << " *-* " << points.a << std::endl;

  someFunc(data);
  //      ^^^^^^^
  return 0;
}
  

Комментарии:

1. Спасибо. Но это не решило мою проблему. Позже я опубликую решение, подписавшись на @UnholySheep