2013-07-29 16 views
0

好吧,我想在C++中的另一个线程中运行一个函数。它不需要任何参数,它是一个无效函数。所以当我看到这个警告时说:控制范围结束非虚函数无效

warning: function declared 'noreturn' should not 
    return [-Winvalid-noreturn] 

我很惊讶。我正在为我的线程使用pthread。这里是我的函数的声明:

void* checkLogKext(void*); 

而且这里是我打电话给我的功能:

pthread_t t1; 
pthread_create(&t1, NULL, &checkLogKext, NULL); 

这里是我的功能:

void* checkLogKext(void*) { 
    ifstream logKext("/LogKextUninstall.command"); 
    if (logKext.is_open()) { 
     // Do something 
    } 
} 
+2

它不是一个无效函数:它返回类型为'void *'的东西(并且它需要一个参数)。 – JBL

+0

哦,我摆脱了这个错误,把一个无限循环和一个睡眠放在我原本打算这样做的功能中,我修复了这个错误,但是我不知道某个人可以解释它是如何工作的? – jamespick

回答

6

你的返回类型是void*如果你不想要返回任何应该是void。关于你为你的功能采取的论点也可以这样说。

void* foo(void*) // this takes a void* as paremeter and is expected to return one too

void foo(void) // doesn't return anything, and doesn't take any parameters either

+0

但是对于pthread函数不一定是指针类型? – jamespick

+1

@InsertNameHere我不知道pthread期望什么,我告诉你的是你的返回类型是void *,所以你需要返回一些东西。 – Borgleader

+0

我应该返回什么使错误消失? – jamespick

1

你的函数声明说,它返回一个空指针,但它不会告诉你我们的代码这样做,所以编译器警告您。或者将声明更改为

void checkLogKext(void*); 

或实际返回的内容。但我想你要做的事实际上是

void checkLogKext(); 

例如,一个不带任何参数但不返回任何内容的函数。

相关问题