| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Определение потока |
| Автор: Valeri 13.3.2007, 09:24 |
| Использую при работе ВСВ 6. Создаю класс-наследник потока TComThread (точнее он создается автоматически в отдельном модуле): class TComThread : public TThread { private: protected: void __fastcall Execute(); public: __fastcall TComThread(bool CreateSuspended); // }; В заголовочном файле главной формы (в классе) пытаюсь создать экземпляр потока класса TComThread (делаю это в классе формы, чтобы можно было обращаться к этому потоку из других модулей программы): private : TComThread* ComThread; Компилятор выдает ошибки : Type name expected Declaration missing ; Насколько я понял компилятор, на момент компиляции файла основной формы, не видит модуль, в котором создан класс-наследник TComThread. Почему так может быть? |
| Автор: Fazil6 13.3.2007, 09:56 |
#include не сделан |
| Автор: ama_kid 13.3.2007, 09:56 |
| #include "модуль_потока.h" ? |
| Автор: Valeri 13.3.2007, 10:00 |
| Извиняюсь, забыл сказать, что все include сделаны. |
| Автор: pandrew 13.3.2007, 10:17 |
| ИМХО где-то у тебя опечатка в декларации класса TComThread. Попробуй закоментить в классе все кроме первой и последней строчки. |
| Автор: Valeri 13.3.2007, 10:24 |
| Но TComThread создается автоматом (самим Билдером). Опечатка не возможна |
| Автор: ama_kid 13.3.2007, 10:32 |
| Тогда цепляй проект к своему посту - просто так гадать имхо бессмысленно... |
| Автор: pandrew 13.3.2007, 10:33 |
| Первый раз слышу. Что за визард? Какой BCB? Кроме того в генерируемых визардами кодах регулярно бывали ошибки. |
| Автор: Fazil6 13.3.2007, 10:37 | ||
например... ? |
| Автор: Valeri 13.3.2007, 10:47 |
| Вот заголовочный файл модуля потока, автоматически генерируемый Билдером (BCB 6) : //--------------------------------------------------------------------------- #ifndef Unit4H #define Unit4H //--------------------------------------------------------------------------- #include <Classes.hpp> //--------------------------------------------------------------------------- class TComThread : public TThread { private: protected: void __fastcall Execute(); public: __fastcall TComThread(bool CreateSuspended); // }; //--------------------------------------------------------------------------- #endif а ниже приведен заголовочный файл главной формы, где я хочу объявить поток типа TComThread : #ifndef VelocityH #define VelocityH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ExtCtrls.hpp> #include "PERFGRAP.h" #include <Menus.hpp> #include <ComCtrls.hpp> #include <Dialogs.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components void __fastcall Button1Click(TObject *Sender); void __fastcall Button2Click(TObject *Sender); void __fastcall Button3Click(TObject *Sender); void __fastcall N8Click(TObject *Sender); private: // User declarations void __fastcall OnConnect(); TComThread *ComThread;//вот это объявление вызывает проблему public: // User declarations HANDLE hCom; struct Data_3byte { unsigned char RecByte1; unsigned char RecByte2; unsigned char RecByte3; } Data; unsigned short Fh; unsigned short Fh1, Fh2, Fh3, Fh4, Fh5, Fh6, Fh7, Fh8, Fh9; float V; int Nsect; unsigned short RecByte; float V1, V2, V3, V4, V5, V6, V7, V8, V9; __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif //--------------------------------------------------------------------------- Дело в том, что если объявлять экземпляр потока где-то в другом модуле и там же запускать поток, то все нормально работает, но тогда нет возможности приостановить поток ComThread, так как он объявлен в какой-то функции (например в обработчике нажатия кнопки) и до него не добраться. А если бы удалось его объявить в классе основной формы, то можно было бы его запускать и останавливать, ссылаясь на эту форму. Но поток не удается объявить в классе формы (см. выше) а почему? |
| Автор: Fazil6 13.3.2007, 11:08 | ||
ну и где там инклуд твоего класса потока? |
| Автор: pandrew 13.3.2007, 11:10 |
| И где в #include "Unit4.h" перед class TForm1? |
| Автор: Valeri 13.3.2007, 11:30 |
| инклуд есть, но в самом модуле Velocity.cpp, а здесь его нет. вы правы. Включил инклуд в Velocity.h. Ошибка пропала. Спасибо всем за помощь. Надо быть внимательнее. |