我想创建一个没有函数参数的线程,但我一直得到严重困扰我的错误,因为我不能得到一些超级简单的工作权利
我的代码:
#include<stdio.h>
#include<array>
#include<pthread.h>
#include<fstream>
#include<string>
void *showart(NULL);
int main(int argc, char** argv){
pthread_t thread1;
pthread_create( &thread1, NULL, showart, NULL);
getchar();
return 0;
}
void *showart(NULL)
{
std::string text;
std::ifstream ifs("ascii");
while(!ifs.eof())
{
std::getline(ifs,text);
printf(text.c_str());
}
}
它给出了错误:
main.cpp:11:50: error: invalid conversion from ‘void*’ to ‘void* (*)(void*)’ [-fpermissive]
2条答案
按热度按时间jtoj6r0c1#
你的函数必须与
pthread
函数匹配;它需要获取并返回void*
。使用
void* showart(void*);
代替。xmjla07d2#
你的线程函数的声明和定义都不正确。你可以在 * 调用 * 它时使用
NULL
,但是声明/定义所需的那个参数的 type 是void *
。因此,您需要类似于:
换句话说,这将实现这一点:
尽管您可能应该考虑使您的代码更健壮一点,例如检查来自
pthread_create()
的返回代码,加入main()
内的线程,检查以确保文件存在,等等。