2014-01-07 2 views
0


Мне нужно сделать метод в вызове класса другим методом в том же классе в новом потоке, но у меня есть некоторые проблемы. Я получаю ошибку компиляции: «« это »недоступно для статических функций-членов». Я сделал пример своей проблемы, так как я не могу опубликовать исходный код здесь.Как сделать метод вызова другого метода в том же классе в новом потоке?

В основном, я делаю объект своего класса (известный ниже как aClass), тогда я вызываю метод, такой как do_stuff(). Метод do_stuff() использует pthread_create для вызова метода print_number() в новом потоке. Проблема в том, что когда я перехожу к компиляции, я получаю сообщение об ошибке, говоря, что я не могу использовать this, потому что мой метод print_number() является статическим. Если я не сделаю метод print_number() статическим, то pthread_create жалуется, что его не совместимый тип.

Я понимаю, почему я не смог использовать this внутри самого метода print_number(), так как он статичен и может быть вызван без объекта. Однако, в моем методе print_number(), я не использую this. Я использую указатель на объект, который я создал. В do_stuff() Я использую this, чтобы передать ссылку на объект, который я создал, на print_number, но я не использую this в print_number. Поэтому я не понимаю, в чем проблема. Спасибо за помощь!

+0

Ищите «метод класса pthread_create». Например, это может пролить свет на проблему: (http://stackoverflow.com/questions/7809987/c-how-to-define-a-class-method-as-a-start-routine-to -thread-with-pthread-lib) – MichaelGoren

ответ

0

U необходимо сделать static_number объявление static внутри класса. Просто замените строку

class aClass 
{ 
    private: 
    number; 

    public: 
    void do_stuff(void); 
    void* print_number(void* arg) 

}; 

с кодом ниже

class aClass 
{ 
    private: 
    int number; 

    public: 
    void do_stuff(void); 
    static void* print_number(void* arg); 

}; 

Это просто класс только часть. Скомпилируйте его, он надеется, что он решит вашу проблему.

+0

Собственно, в реальном коде у меня есть статический текст, написанный в части класса. Я просто забыл написать это в моем примере здесь. Извини за это! -модифицированный выше пример. – Michael

Смежные вопросы