错误:从'int *'到'int'的无效转换[-fpermissive]

时间:2017-12-05 01:08:57

标签: c++ c

获取错误:

  

错误:从'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);
}

3 个答案:

答案 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中的地址,而不是存储在那里的值。