Как устранить эту ошибку в программе C? - PullRequest
1 голос
/ 21 ноября 2011

Этот код отлично работает на c ++. Мне нужно решение для C.

Это мой пример.

 FileName:Mail.c

Это заявление, которое я сделал в файле mail.c

 #ifdef __cplusplus
   typedef int (__cdecl *SetIpAddressFun)(char* , int  , int );
   typedef bool (__cdecl *SendMailFun)(char * , char *);
 #endif

Я использовал указатели этой функции в функции func () в том же файле mail.c

 void func()
 {
     SendMailFun sendMailFuncPtr;
     SetIpAddressFun setIpAddressFuncPtr;
 }

EDIT

Если я удаляю строки #ifdef в файле mail.c, то отображается следующая ошибка:

 error C2143: syntax error : missing ')' before '__cdecl'
 e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(138) : error C2143: syntax error : missing '{' before '__cdecl'
 e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(138) : error C2059: syntax error : ')'
 e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(138) : error C2165: 'left-side modifier' : cannot modify pointers to data

ОШИБКА

Список ошибок, возникших при компиляции вc.

  e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1615) : error   C2065: 'SendMailFun' : undeclared identifier

  e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1615) : error C2146: syntax error : missing ';' before identifier 'sendMailFuncPtr'

  e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1615) : error C2065: 'sendMailFuncPtr' : undeclared identifier
  e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1616) : error C2065: 'SetIpAddressFun' : undeclared identifier
  e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1616) : error C2146: syntax error : missing ';' before identifier 'setIpAddressFuncPtr'
  e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1616) : error C2065: 'setIpAddressFuncPtr' : undeclared identifier
   e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1625) : error C2065: 'setIpAddressFuncPtr' : undeclared identifier
   e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1625) : error C2065: 'SetIpAddressFun' : undeclared identifier
   e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1625) : error C2146: syntax error : missing ';' before identifier 'GetProcAddress'
    e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1626) : error C2065: 'setIpAddressFuncPtr' : undeclared identifier
    e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1626) : warning C4047: '!=' : 'void *' differs in levels of indirection from 'int'
    e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1628) : warning C4013: 'setIpAddressFuncPtr' undefined; assuming extern returning int
    e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1630) : error C2065: 'sendMailFuncPtr' : undeclared identifier
    e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1630) : error C2065: 'SendMailFun' : undeclared identifier
    e:\projects\avg\apps\ezcepanel i.7 - pcpanel from vss\ccode\alarms.c(1630) : error C2146: syntax error : missing ';' before identifier 

Ответы [ 2 ]

1 голос
/ 21 ноября 2011

Это потому, что когда вы объявили функцию

#ifdef __cplusplus
   typedef int (__cdecl *SetIpAddressFun)(char* , int  , int );
   typedef bool (__cdecl *SendMailFun)(char * , char *);
 #endif

, вы делаете это условно только для __cplusplus , который обычно не определяется при компиляции файлов C

EDIT

Думаю, ваша вторая проблема связана с наличием bool , которое, насколько мне известно, не является ключевым словом C .Учитывая его замену на int

1 голос
/ 21 ноября 2011

#ifdef __cplusplus означает, что бит кода будет выполняться только при использовании компилятора C ++.

Этот бит определяет тип указателя на функцию SendMailFun, поэтому ошибки компилятора жалуются на то, что SendMailFun и SendMailFun не существует.

Вы можете начать с удаления строк

#ifdef __cplusplus

и

#endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...