获取错误:
错误:从'int *'到'int'的无效转换[-fpermissive] 在g ++上
以下代码:
void* func(void *s)
{
int i = 0;
int self = (int *)s;
printf("Thread Entered: %d\n", self);
sm.lock(self);
// Critical section (Only one thread
// can enter here at a time)
for (i=0; i<MAX; i++)
ans++;
sm.unlock(self);
}
答案 0 :(得分:2)
您需要将int self = (int *)s;
更改为int self = *((int *)s);
或int * self = (int *)s;
。
答案 1 :(得分:1)
您需要将这些视为两个不同的事物。一个是存储值的存储器指针(int*
),另一个是实际值(int
)。
查看您的函数声明void* func(void *s)
,s
参数的类型为void
,如果您希望转换它,则需要int
。 击>
您的数据类型看起来有点混乱,但在C / C ++中表现不佳。 你可以清理它吗?如果你使用pthread_create()
这个函数,根据这个函数的例子,请尝试..
// your pthread_create call..
int SOME_INT = 123;
s = pthread_create(&thread_id, &attr, &thread_start, &SOME_INT);
//...and your function
void* func(void *s)
{
int self = (int*) s;
指针可能令人困惑。查看上面的代码是否相似,特别是将pthread_create
的最后一个参数作为指针引用传递。然后尝试原始代码。可能只是它没有作为参考传递。
看看是什么让你产生,否则尝试将其存储为指针,然后在使用时进行转换。
void* func(void *s)
{
int *self = s;
sm.lock(*self); // but can give a potential race condition.
答案 2 :(得分:0)
在函数体的第二行,我怀疑你是在尝试获取s
的值(作为int
指针),但实际上你直接将其转换为int
。这将产生s
中的地址,而不是存储在那里的值。