static struct dll_wifi_state **dll_states;
enum dll_type {
DLL_UNSUPPORTED,
DLL_ETHERNET,
DLL_WIFI
};
struct dll_state {
enum dll_type type;
union {
struct dll_eth_state *ethernet;
struct dll_wifi_state *wifi;
} data;
};
static struct dll_state *dll_states = NULL;
struct dll_wifi_state {
int link;
// A pointer to the function that is called to pass data up to the next layer.
up_from_dll_fn_ty nl_callback;
bool is_ds;
};
이 포인터는 dll_wifi_state 구조체에서 전달되는 메서드입니다. 다른 파일에서 호환되지 않는 포인터 형식의 인수 전달
static void up_from_dll(int link, const char *data, size_t length)
{
//some code here
}
, 나는
void reboot_accesspoint()
{
// We require each node to have a different stream of random numbers.
CNET_srand(nodeinfo.time_of_day.sec + nodeinfo.nodenumber);
// Provide the required event handlers.
CHECK(CNET_set_handler(EV_PHYSICALREADY, physical_ready, 0));
// Prepare to talk via our wireless connection.
CHECK(CNET_set_wlan_model(my_WLAN_model));
// Setup our data link layer instances.
dll_states = calloc(nodeinfo.nlinks + 1, sizeof(struct dll_state));
for (int link = 0; link <= nodeinfo.nlinks; ++link) {
switch (linkinfo[link].linktype) {
case LT_LOOPBACK:
dll_states[link].type = DLL_UNSUPPORTED;
break;
case LT_WAN:
dll_states[link].type = DLL_UNSUPPORTED;
break;
case LT_LAN:
dll_states[link].type = DLL_ETHERNET;
dll_states[link].data.ethernet = dll_eth_new_state(link, up_from_dll);
break;
case LT_WLAN:
dll_states[link].type = DLL_WIFI;
dll_states[link].data.wifi = dll_wifi_new_state(link,
up_from_dll,
true /* is_ds */);
break;
}
}
// printf("reboot_accesspoint() complete.\n");
}
그것은이 같은 잘 작동하지만 내가 다른 인수를 추가 할 예 up_from_dll ((INT 링크, CONST 문자 * 데이터를 size_t 길이이 메서드를 호출하고 ., INT의 서열) 그리고 최대한 빨리이 인수를 추가 할 때, 다음과 같은 오류가 시작이
ap.c:153: warning: passing argument 2 of ‘dll_wifi_new_state’ from incompatible pointer type
오고 ??? 내가 포인터 정말 나쁜 오전 오류가 발생하지 않고 그 방법에 또 다른 인수를 추가하는 방법이 있나요 : (
도움을 주시면 감사하겠습니다.
라인 (153) :
dll_states[link].data.wifi = dll_wifi_new_state(link,
up_from_dll,
true /* is_ds */);
및 방법
struct dll_wifi_state *dll_wifi_new_state(int link,
up_from_dll_fn_ty callback,
bool is_ds)
{
// Ensure that the given link exists and is a WLAN link.
if (link > nodeinfo.nlinks || linkinfo[link].linktype != LT_WLAN)
return NULL;
// Allocate memory for the state.
struct dll_wifi_state *state = calloc(1, sizeof(struct dll_wifi_state));
// Check whether or not the allocation was successful.
if (state == NULL)
return NULL;
// Initialize the members of the structure.
state->link = link;
state->nl_callback = callback;
state->is_ds = is_ds;
return state;
}
내가 up_from_dll 할 수있는 새로운 매개 변수를 추가 떨어져 아무 것도 변경되지 않았습니다.
나는 이제 이해하고 명확한 답변으로 내 답변을 업데이트합니다. ~. – xaxxon