Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> класс с потоком, ошибка при компиляции 
:(
    Опции темы
Vetos
Дата 28.5.2010, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: нет
Всего: 4



Здравствуйте!

Начинаю изучать потоки и вот в самом начале борода.
Есть вот такой вот класс
Код
class CAI
{
    struct TParams
    {
        bool Color;
        bool Done;
        TMoveInfo mInfo;
    }Params;

public:

    void Thread( void * ga )
    {
        Search( Params.Color, -2000, 2000, 0 );
        Params.Done = true;
    }

    bool Done( void )
    {
        if( Params.Done )return true;
        else return false;
    }

    void MoveWhite( void )
    {
        Params.Done = false;
        _beginthread( Thread , 0, NULL ); <= на этой строке выдает ошибку
    }

    CAI(void)
    {
    }

    ~CAI(void)
    {
    }
};


сама ошибка :
 error C3867: CAI::Thread: в вызове функции отсутствует список аргументов; используйте "&CAI::Thread" для создания указателя на член
Если вызываю _beginthread( Thread( 0 ) , 0, NULL );
то ошибка:
error C2664: _beginthread: невозможно преобразовать параметр 1 из 'void' в 'void (__cdecl *)(void *)'  Выражение, имеющее тип void, нельзя преобразовать в другой тип
Что надо сделать???

Да, программлю в vs2008 с++. 


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
ИванМ
Дата 28.5.2010, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



А код, где вы работаете с этим классом?
PM MAIL   Вверх
Vetos
Дата 28.5.2010, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: нет
Всего: 4



Так а дело не в том как я с ним работаю, на стадии компиляции выдается ошибка, ну а работа то
Код

    CAI ai;
    ai.MoveWhite();


Это сообщение отредактировал(а) Vetos - 28.5.2010, 22:02


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
ИванМ
Дата 28.5.2010, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



Код

_beginthread( (void*)Thread , 0, NULL );

Преобразовать забыли.
PM MAIL   Вверх
Vetos
Дата 28.5.2010, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: нет
Всего: 4



Погуглил, пишут что надо сделать метод статическим или не методом класса, когда делаю статическим, перестает быть видимой структура Params;
Код
class CAI
{
    struct TParams
    {
        bool Color;
        bool Done;
        TMoveInfo mInfo;
    }Params;

public:

    static void Thread( void * ga )
    {
        Search( Params.Color, -2000, 2000, 0 );
        Params.Done = true;
    }

    bool Done( void )
    {
        if( Params.Done )return true;
        else return false;
    }

    void MoveWhite( void )
    {
        Params.Done = false;
        _beginthread( Thread , 0, NULL );
    }

    CAI(void)
    {
    }

    ~CAI(void)
    {
    }
};


вот ошибки:
error C2228: выражение слева от ".Color" должно представлять класс, структуру или объединение
error C2228: выражение слева от ".Done" должно представлять класс, структуру или объединение

Добавлено @ 22:14
Цитата(ИванМ @  28.5.2010,  22:10 Найти цитируемый пост)
код C++1:_beginthread( (void*)Thread , 0, NULL );highlightSyntax('cpp_WVkZTd','cpp');Преобразовать забыли.


так выдает следующую ошибку:
error C2440: приведение типов: невозможно преобразовать 'void (__thiscall CAI::* )(void *)' в 'void *'



Это сообщение отредактировал(а) Vetos - 28.5.2010, 22:22


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
jonie
Дата 28.5.2010, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



Params не может быть использован внутри статической функции, она не имеет доступа к объекту. Передавайте this как параметр в _beginthread и в функции обработчике приводите void*ga к CAI*

Это сообщение отредактировал(а) jonie - 28.5.2010, 23:00


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Vetos
Дата 29.5.2010, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: нет
Всего: 4



А можно с примером, не понятно что писать


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.