проблемы вызова переменных в структуре в функции в с - PullRequest
0 голосов
/ 11 апреля 2011
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: синтаксическая ошибка рядом со структурой.Я пытался понять, но не смог найти никакого решения
Пожалуйста, помогите .. спасибо

С уважением Кевин


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

#include <stdio.h>

struct gps_position
{
float alt;
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

 }

Ответы [ 4 ]

4 голосов
/ 11 апреля 2011

Вам нужно внести объявление сразу после структуры.Увидимся любимая книга 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 ;
1 голос
/ 11 апреля 2011

Вы хотите начать с присвоения тега своей структуре 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;
}
1 голос
/ 11 апреля 2011

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

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 arg;

//Do assigning stuff before the function is called.

LatLongAlt_to_ECEF_coordinates(arg);
0 голосов
/ 11 апреля 2011

Это уничтожит вашу ошибку:

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

     #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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...