2010-04-07 76 views
1

我有上述错误request member rv in something not a structure of union。我GOOGLE了它和几个答案告诉我一个指针工作时,它可是尝试访问它作为一个结构,我应该使用的->代替.编译错误:请求成员的东西不是工会的结构

int foo(void * arg, struct message * msg) 
    { 
    struct fd_info * info = (struct something *) arg; 
    struct client * csys = info->c_sys; 
    int * socks[MAX_CONNECTION]; 
    int rv; 
    socks = &(info->_socks); // where int * _socks[MAX_CONNECTION] in struct info 

    // do other things 

    rv = sendto(socks[i], msg, sizeof(msg), NULL, &(csys->client_address), sizeof(csys->client_address)); 
    ... 
    } 

的问题是所有的论点,我有是指针。我很困惑什么是错的。感谢任何意见/想法。

编辑: 对不起&味精,它最初只是味精,但在我绝望的尝试,我正在尝试的东西。 添加了rv的定义。

+0

是否缺少一些正确的语法,它说 – WhirlWind 2010-04-07 00:57:26

+1

请显示'rv'的定义 – 2010-04-07 00:57:55

+0

此外,'csys'的定义可能会有所帮助。 – 2010-04-07 01:12:29

回答

1

msg已经是一个指针。所以也许你应该有msg而不是&msg, 和sizeof(*msg)而不是sizeof(&msg),在你传递给sendto的参数中?

+0

抱歉关于&味精的混淆,它最初是味精,但我打错了它。还sizeof(*味精)不起作用,我仍然得到相同的错误,关于它不是结构或联合。 – 2010-04-07 03:18:06

1

我看到几个问题,但不一定是导致错误的那个问题。您需要提供更多代码并告诉我们错误发生的位置。

问题: 1)为什么你在sendto()的调用中使用& msg?味精已经是一个指针了。你的意思是传递一个指针指针?

2)sizeof(& msg)评估为指针的大小。那是你想要的还是你想要的数据大小msg指向?

3)我对你错误原因的猜测是csys。它是什么?它是一个指针还是一个结构?

0

你可以请尝试下面。

更改下面

 int * socks[MAX_CONNECTION]; 

 int** socks; 
    *socks = &(info->_socks); 

访问: “做其他事情”

 int i = *socks[index]; 
+0

我其实没有得到任何错误,谢谢!但是,我如何使用它来引用具有索引的信息? – 2010-04-07 03:24:04

+0

对不起,我的错误是,我看错了行号。我仍然得到同样的错误。 – 2010-04-07 03:40:25

+0

尝试将以下声明移至该函数的开始位置。 int * socks [MAX_CONNECTION]; int rv; struct fd_info * info =(struct something *)arg; struct client * csys = info-> c_sys; – Ramakrishna 2010-04-07 03:55:57

相关问题