#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);
}