Вы хотите начать с присвоения тега своей структуре 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);
Только в типичном случае вы хотите передать указатель на структуру:
LatLongAlt_to_ECEF_coordinates(&pos);
Лично я думаю,Я бы отделил основанные на радианах координаты от основанных на 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(&r_pos, &e_pos);
Или вы можете написать функцию, которая будет возвращать правильный тип:
e_pos = LatLongAlt_to_ECEF_coordinates(&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;
}