проблемы при вызове переменных в struct в функции на c

#c

#c

Вопрос:

 struct
{
    float lat_radians;          //latitude in radians
    float lon_radians;          //longtiude in radians
    float alt_radians;          //altiude in radians
    double ECEF_X;          // ECEF X in metres
    double ECEF_Y;                // ECEF Y in metres
    double ECEF_Z;                // ECEF Z in metres

} gps_position;

void main()
{
LatLongAlt_to_ECEF_coordinates(struct gps_position {float lon; float lat; float alt} arg);
}
  

у меня ошибка с c141: синтаксическая ошибка рядом со ‘struct’. я пытался выяснить, но не смог найти никакого решения
Пожалуйста, помогите..
Спасибо

С наилучшими пожеланиями, Кевин


спасибо за вашу полезную информацию. Но я внес некоторые изменения в свои коды, и у меня все еще возникают проблемы с ошибкой C3861: ‘lla_to_ECEF’: идентификатор не найден amp; ошибка C2365: ‘lla_to_ECEF’: переопределение; предыдущее определение было ‘ранее неизвестный идентификатор’ Могу ли я узнать, как я могу исправить свою ошибку отсюда? спасибо, Кевин

 #include <stdio.h>

struct gps_position
{
float a<
float lon;
float lat;
double ECEF_x;
 };

 void main ()
 {

lla_to_ECEF (gps_position.alt);

 return;
 }

 float lla_to_ECEF (float alt)
 {

 //some calculate to be done

 }
  

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

1. кевин, просто для справки на будущее, вы можете форматировать код, сделав отступ в 4 пробела или расставив вокруг него обратные метки. Или вы можете выделить код и нажать кнопку {} вверху

Ответ №1:

Вам нужно привести объявление сразу после struct . Смотрите вашу любимую книгу по C для примеров.

 struct gps_position
{
    float lat_radians;          //latitude in radians
    float lon_radians;          //longtiude in radians
    float alt_radians;          //altiude in radians
    double ECEF_X;              // ECEF X in metres
    double ECEF_Y;              // ECEF Y in metres
    double ECEF_Z;              // ECEF Z in metres
} ;
  

или

 typedef struct 
{
      float lat_radians;          //latitude in radians
      float lon_radians;          //longtiude in radians
      float alt_radians;          //altiude in radians
      double ECEF_X;              // ECEF X in metres
      double ECEF_Y;              // ECEF Y in metres
      double ECEF_Z;              // ECEF Z in metres
} gps_position ;
  

Ответ №2:

Во-первых, это недопустимый способ объявления struct попробуйте это:

 struct gps_position
{
    float lat_radians;          //latitude in radians
    float lon_radians;          //longtiude in radians
    float alt_radians;          //altiude in radians
    double ECEF_X;              // ECEF X in metres
    double ECEF_Y;              // ECEF Y in metres
    double ECEF_Z;              // ECEF Z in metres

};
  

Во-вторых, если вы хотите передать struct функции, выполните:

 gps_position arg;

//Do assigning stuff before the function is called.

LatLongAlt_to_ECEF_coordinates(arg);
  

Ответ №3:

Вы хотите начать с присвоения тега вашей структуре gps_position:

 struct gps_position
{
    float lat_radians;          //latitude in radians
    float lon_radians;          //longtiude in radians
    float alt_radians;          //altiude in radians
    double ECEF_X;          // ECEF X in metres
    double ECEF_Y;                // ECEF Y in metres
    double ECEF_Z;                // ECEF Z in metres

};
  

То, что у вас было раньше, определило переменную с именем gps_position , но не дало имя самой структуре.

 void main()
  

Не то чтобы это имело особое отношение к рассматриваемому вопросу, но main обычно должно возвращать int .

 {
LatLongAlt_to_ECEF_coordinates(struct gps_position {float lon; float lat; float alt} arg);
}
  

Если вы хотите вызвать функцию с помощью gps_position , вы обычно делаете что-то вроде этого:

 struct gps_position pos;

LatLongAlt_to_ECEF_coordinates(pos);
  

Только в типичном случае вы хотите передать указатель на struct:

 LatLongAlt_to_ECEF_coordinates(amp;pos); 
  

Лично я думаю, что я бы отделил координаты на основе radian от координат на основе ECEF:

 struct radian_coords { 
   float latitude, longitude, altitude;
}

struct ECEF_coords { 
   double X, Y, Z;
}
  

Затем, когда вы преобразуете из одной в другую, вы передаете экземпляр каждой:

 struct radian_cords r_pos = { 12345.6, 23456.7, 123.4 };
struct ECEF_coords e_pos;

LatLongAlt_to_ECEF_coordinates(amp;r_pos, amp;e_pos);
  

Или вы могли бы написать функцию, возвращающую правильный тип:

 e_pos = LatLongAlt_to_ECEF_coordinates(amp;r_pos);
  

В этом случае заголовок вашей функции будет выглядеть примерно так:

 struct e_pos LatLongAlt_to_ECEF_coordinates(struct r_pos const *input) { 
    struct e_pos ret;
    // compute and assign values to ret.X, ret.Y and ret.Z
    return ret;
}
  

Ответ №4:

Это устранит вашу ошибку:

Это правильный способ передать структуру в качестве аргументов в функцию

      #include <stdio.h>
     typedef struct 
     {
        float lat_radians;          //latitude in radians
        float lon_radians;          //longtiude in radians
        float alt_radians;          //altiude in radians
        double ECEF_X;          // ECEF X in metres
        double ECEF_Y;                // ECEF Y in metres
        double ECEF_Z;                // ECEF Z in metres

      } gps_position;

    void main()
    {
        gps_position gps;
            LatLongAlt_to_ECEF_coordinates(gps);
    }