LINUX.ORG.RU

C++: конструктор


0

0

Прошу прощения за глупый вопрос, не могу найти у Страуструпа :(

Есть враппер для pthread, конструктор выглядит так: public: PlThreadSimple(void (*f)(void*), void* op) :func(f), opaque(op) {}

Насколько я понял, использование может быть например таким: PlThreadSimple intfy_th(&run,NULL);

Но gcc выдает: FSChangeMon.h:71: ошибка: ‘run’ is not a type FSChangeMon.h:71: ошибка: expected identifier before ‘__null’ FSChangeMon.h:71: ошибка: expected ‘,’ or ‘...’ before ‘__null’

Так как его нормально инициализировать и что значит ":func(f), opaque(op) {}" ?

Ответ на: комментарий от asgard

Отличие - отсутствие & (я его поставил чтобы сделать очевидным передачу адреса). Как сказано выше - не работает. Но все равно спасибо за ответ в 7 часов утра :)

flagist0
() автор топика
Ответ на: комментарий от flagist0

хм, в данном случае run должна представлять типичную ф-ю вида:

void run(void *param)
{
action();
}

в любом случае без кода это превращается в гадание на кофейной гуще.

asgard
()
Ответ на: комментарий от asgard

Враппер: class PlThreadSimple : public PlThread {

void (*func)(void*);

void* opaque;

public:

PlThreadSimple(void (*f)(void*), void* op) :func(f), opaque(op) {}

virtual void thread_main() {func(opaque);} };

Функция run из моего класса:

void FSChangeMon::run(){for (;;) if ((run_fl)&&(!fschm_is_locked())) get_event();}

что-то в этом роде. Основная проблема в том, что я банально не понимаю, что значит ":func(f), opaque(op) {}" после определения конструктора. На всякий случай: я превентивно запустил тред, КАК сделать метод функцией потока: http://www.linux.org.ru/view-message.jsp?msgid=2307675&lastmod=1196724843338

flagist0
() автор топика
Ответ на: комментарий от flagist0

> void FSChangeMon::run(){for (;;) if ((run_fl)&&(!fschm_is_locked())) get_event();}


void FSChangeMon::run(void *unused) // <-
{
for (;;)
if ((run_fl)&&(!fschm_is_locked()))
get_event();
}

> что я банально не понимаю, что значит ":func(f), opaque(op) {}"

инициализация полей с именами func и opaque. это эвквивалентно:

PlThreadSimple(void (*f)(void*), void* op)
{
func = f;
opaque = op;
}

asgard
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.