Я из Колумбии, поэтому ошибка на испанском языке. Это, кажется, самое быстрое место, чтобы получить ответ ...Ошибка конвертации нити C++
Я пытаюсь сделать простую программу, которая создает темы и сохраняет информацию в векторе, но когда я построить код появляется следующая ошибка:
...Lanzador.cpp|19|error: no se puede convertir ‘void* (Hilo::*)(void*)’ a ‘void* (*)(void*)’ para el argumento ‘3’ para ‘int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)’|
у меня есть три файла: заголовок для Hilos, который говорит:
#ifndef HILO_H
#define HILO_H
using namespace std;
class Hilo
{
public:
Hilo();
virtual ~Hilo();
void addHilo(int);
void* ImprimirHilo(void*);
protected:
private:
};
#endif // HILO_H
Hilo.cpp, который говорит:
#include <iostream>
#include <vector>
#include <cstdlib>
#include <pthread.h>
#include <unistd.h>
#include "Hilo.h"
using namespace std;
vector<int> info (1);
Hilo::Hilo()
{
//ctor
}
Hilo::~Hilo()
{
//dtor
}
void Hilo::addHilo(int tiempo){
info.push_back(tiempo);
}
void* Hilo::ImprimirHilo(void *threadid)
{
long tid;
tid = (long) threadid;
int n =info.at(tid);
for (int i=n; i>0; i--){
info.at(tid)=i;
cout << "El hilo numero: " << tid << " tiene " << i <<" segundos"<< endl;
sleep(1);
}
pthread_exit(NULL);
}
А класс, который имеет основной Lanzador.cpp
#include <iostream>
#include <cstdlib>
#include <pthread.h>
#include "Hilo.h"
using namespace std;
int main(){
Hilo h;
pthread_t threads;
int tiempo=0;
int rc;
int contador=0;
cout << "Para salir oprima 0 \n"<<endl;
cout << "Escriba el tiempo del hilo" << endl;
while (true){
cin >> tiempo;
if (tiempo>0){
contador++;
h.addHilo(tiempo);
rc = pthread_create(&threads, NULL,&h.ImprimirHilo, (void*)contador);
if (rc){
cout << "Error:unable to create thread," << rc << endl;
exit(-1);
}
}
}
pthread_exit(NULL);
}
Я надеюсь, что вы люди могут помочь мне. Извините за плохой английский и спасибо за помощь
Нестатические функции-члены не являются функциями. Вы не можете * вызывать * функцию-член (ей нужен объект!). Есть тысячи дубликатов этого вопроса. –
И начинаем отсюда: http://stackoverflow.com/questions/1151582/pthread-function-from-a-class –
Возможно, вы как-то измените свой язык на английский язык для GCC/Make run. – millimoose