2015-05-02 4 views
0

Я пытаюсь скомпилировать файл .c, но НКУ бросает эти две ошибки:НКУ ожидается идентификатор или «(

Polarkor.c:15:11: error: expected identifier or '(' 
pol2cart(double r, double phi, double *x, double *y){ 

и

Polarkor.c:15:11: error: expected ')' 

Это мой код:

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

struct cor { int *x; int *y; }; 

struct pol2cart(double r, double phi, double *x, double *y) 
{ 
    *(cor.x) = r * cos(phi); 
    *(cor.y) = r * sin(phi); 
    return cor; 
} 

int main(int argc, char *argv[]) 
{ 
    double vecx, vecy = 4; 
    pol2cart(1.0, M_PI/4, &vecx, &vecy); 
    printf("vec: x = %g, y = %g\n", vecx, vecy); 
} 

Любые предложения?

+1

не называют экземпляр структуры такой же, как имя определения/тега структуры. – user3629249

+3

при компиляции, включите все предупреждения. то вы увидите. 1) неопределенное имя переменной 'cor', 2) неиспользуемый параметр argc, 3) неиспользуемый параметр argv [], 4) неиспользуемый параметр x 5) неиспользованный параметр y. 6) отсутствующий оператор возврата в main, 7) переменная vecx, используемая без инициализации, – user3629249

+0

Я буду использовать -Wall в следующий раз точно! – Stan

ответ

2

Я думаю, что вы хотите:

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

struct cor {int x; int y;}; 

struct cor 
pol2cart(double r, double phi){ 
    struct cor cor; /* legal, but generally a bad idea to use the same name */ 
    cor.x = r * cos(phi);  
    cor.y = r * sin(phi);  
    return cor; 
} 

В этом struct cor является тип объекта, и cor это имя локальной переменной в функции pol2cart. Обычно считается, что плохая практика (действительно, ужасная) использует одно и то же имя для переменной как тип объекта, но она является законной, поскольку они находятся в разных пространствах имен. (Кто говорит, что C не имеет пространств имен ?!) Похоже, что вы пытаетесь создать глобальную переменную в исходном коде, который может быть сделано с:

struct cor { int x; int y;} cor; 

, но, вероятно, плохая идея, так как маловероятно, что ваша программа будет использовать только одну координату. Кажется, что struct point может быть лучшим именем.

+0

Спасибо, человек, не видел, что он работает сейчас! – Stan

0
struct pol2cart(double r, double phi, double *x, double *y) { /* ... */ } 

Это похоже на неполное определение функции. Его тип возврата - struct pol2cart (который не определен), и у него нет имени.

Также

struct cor {int *x; int *y;}; 

определяет тип имени struct cor, но никаких переменных. Позже в вашей программе вы ссылаетесь на переменную с именем cor, которая не существует.

0

Функция не имеет возвращаемого типа

struct 
pol2cart(double r, double phi, double *x, double *y){ 
//... 

И нет ни одного объекта с именем кором. Таким образом, эти заявления

*(cor.x) = r * cos(phi);  
*(cor.y)= r * sin(phi);  

недействительны. Вы не можете использовать имя структуры в этих конструкциях. Вы должны создать объект типа структуры, который будет обращаться к своим членам данных.

Также параметры double *x и double *y не используются в функции.

Программа не имеет никакого смысла :)

0

Опубликованная код:.

**struct** 
pol2cart(double r, double phi, double *x, double *y){ 
*(cor.x) = r * cos(phi);  
*(cor.y)= r * sin(phi);  
return cor; 

} 

, что одинокий 'структура' является проблемой. Возможно, вы имели в виду «пустота» или «структура кор»

главный игнорирует возвращаемое значение из вызова pol2cart()

Я предложил бы использовать «пустоту» и удаление оператор возврата

Смежные вопросы