传递函数指针时出现错误

时间:2019-04-20 05:59:33

标签: c function pointers

我需要传入一个函数作为参数。我已经看到很多网站都使用这种格式,并且他们说它可以在函数名称前使用或不使用&,无论哪种方式,都会给我一个错误。

(clojure.string/split nums11 #" ")

即使我传入func1指针,也会给我一个错误

错误/警告我得到:  警告:从不兼容的指针类型传递'set_iterate'的参数3

set_iterate原型: void set_iterate(set_t * set,void * arg,          void(* itemfunc)(void * arg,const char * key,void * item));

1 个答案:

答案 0 :(得分:1)

<xs:complexType>
<xs:sequence>
  <xs:element name="Origin" type="xs:string" /> 
  <xs:element name="Destination" type="xs:string" /> 
  <xs:element name="FlightNo" type="xs:string" /> 
  <xs:element name="FlightDate" type="xs:dateTime" /> 
  <xs:element name="PassengersId" type="xs:long" /> 
  <xs:element name="Gender" type="xs:string" /> 
  <xs:element name="FirstName" type="xs:string" /> 
  <xs:element name="LastName" type="xs:string" /> 
  <xs:element name="ClassOfService" type="xs:string" /> 
  <xs:element name="SSR" type="xs:string" /> 
  <xs:element name="SSRCode" type="xs:string" /> 
  <xs:element name="ChkInStatus" type="xs:string" /> 
  <xs:element name="BoardingStatus" type="xs:string" /> 
  <xs:element name="Passenger_Type" type="xs:string" /> 
  <xs:element name="SeatNo" type="xs:string" /> 
  <xs:element name="PassengerCountryCode" type="xs:string" /> 
  <xs:element name="ClassOfService" type="xs:string" /> 
  <xs:element name="FFP" nillable="true" type="xs:string" /> 
  <xs:element name="PassengerCountryName" type="xs:string" /> 
  </xs:sequence>

是非法的,因为 typedef 定义了一种类型,而不是变量


声明

 typedef void (*func1)(void*, char*, void*) = iterate_test;

是错误的,因为该功能是

 static void iterate_test(void *node);

替换为

 static void iterate_test(void *node, char *key, void *item)
 {
    ...
 }

  

即使我传入func1指针,也会给我一个错误

上次更正后 static void iterate_test(void *node, char *key, void *item); 是正确的(没有void (*func1)(void*, char*, void*) = iterate_test;


  

错误/警告,我得到:警告:从不兼容的指针类型传递'set_iterate'的参数3

     

set_iterate原型:void set_iterate(set_t * set,void * arg,void(* itemfunc)(void * arg,const char * key,void * item));

typedef期望的函数指针的第二个参数需要一个set_iterate,但是const char *的第二个参数需要一个iterate_test,这就是为什么您收到该消息的原因

char *的配置文件中删除 const 或将set_iterate的声明和定义修改为

iterate_test

当然,在第二种情况下,如果您仍然希望将指针保存在 func1 中,则需要

 static void iterate_test(void *node, const char *key, void *item);
 ...
 static void iterate_test(void *node, const char *key, void *item)
 {
     ...
 }