C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Помогите с MESSAGE_MAP, 'PMessage' and 'Message::PMessage'
PATRIOT
Отправлено: 12.09.2005, 02:20


Не зарегистрирован







У меня CLX приложение при объявлении MESSAGE_MAP, выделяет строку BEGIN_MESSAGE_MAP и пишет
E2015 Ambiguity between 'PMessage' and 'Message::PMessage'
В мануале написано, что это конфликт с MFC, а как его лечить я не нашел.
Как заставить ЭТО работать?
Gedeon
Отправлено: 12.09.2005, 08:34


Ветеран

Группа: Модератор
Сообщений: 1742



Явно указать пространство имен. Можете по форуму поискать со словом BEGIN_MESSAGE_MAP, может чем поможет. smile.gif
olegenty
Отправлено: 12.09.2005, 15:43


Ветеран

Группа: Модератор
Сообщений: 2412



2 Gedeon — у него, похоже, неопределённость возникает при парсинге самого макроса. соответственно, надо искать реализацию и явно конкретизировать тип прямо там.
olegenty
Отправлено: 12.09.2005, 15:44


Ветеран

Группа: Модератор
Сообщений: 2412



возможно, ситуация сменится, если поменять местами #include (хотя, сомневаюсь)
Gedeon
Отправлено: 12.09.2005, 15:59


Ветеран

Группа: Модератор
Сообщений: 1742



Ну тогда код в студию.
PATRIOT
Отправлено: 16.09.2005, 01:37


Не зарегистрирован







QUOTE (Gedeon @ 12/09/2005, 15:59)
Ну тогда код в студию.

CODE

//---------------------------------------------------------------------------

#ifndef UPortH
#define UPortH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <QControls.hpp>
#include <QStdCtrls.hpp>
#include <QForms.hpp>
#include <QExtCtrls.hpp>
#include <QTypes.hpp>
//---------------------------------------------------------------------------
class TFormPort : public TForm{
__published: // IDE-managed Components
private: // User declarations
public:  // User declarations

 BEGIN_MESSAGE_MAP
 END_MESSAGE_MAP(TComponent)

 __fastcall TFormPort(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TFormPort *FormPort;
//---------------------------------------------------------------------------
#endif


Ambiguity between 'PMessage' and 'Messages::PMessage'
olegenty
Отправлено: 16.09.2005, 06:38


Ветеран

Группа: Модератор
Сообщений: 2412



сиранно то, что map для формы завершается end'ом для компонента. должно быть:
END_MESSAGE_MAP(TForm)
PATRIOT
Отправлено: 18.09.2005, 02:15


Не зарегистрирован







QUOTE (olegenty @ 16/09/2005, 06:38)
сиранно то, что map для формы завершается end'ом для компонента. должно быть:
END_MESSAGE_MAP(TForm)

Это ни на что не повлияло sad.gif
Gedeon
Отправлено: 19.09.2005, 12:06


Ветеран

Группа: Модератор
Сообщений: 1742



можете открыть файл sysmac.h и вот так поправить в нем макрос


CODE

#define BEGIN_MESSAGE_MAP   virtual void __fastcall Dispatch(void *Message) \
       {                                           \
         switch  (((/*Messages::*/PMessage)Message)->Msg)        \
         {

Уберите коментарии.
olegenty
Отправлено: 19.09.2005, 15:58


Ветеран

Группа: Модератор
Сообщений: 2412



угу, вот я именно это имел в виду, когда говорил о кривизне макроса.
Gedeon
Отправлено: 19.09.2005, 18:11


Ветеран

Группа: Модератор
Сообщений: 1742



Да, но только настоятельно рекомендуется разобраться таки что такое PMessage & Messages::PMessage ибо вещи м.б. разные, поверхностный поиск по справке на этот вопрос мне не ответил, посему неплохо бы вопрошающему разобраться.
PATRIOT
Отправлено: 23.09.2005, 06:14


Не зарегистрирован







QUOTE (Gedeon @ 19/09/2005, 12:06)
можете открыть файл sysmac.h и вот так поправить в нем макрос


CODE

#define BEGIN_MESSAGE_MAP virtual void __fastcall Dispatch(void *Message) \
{ \
switch (((/*Messages::*/PMessage)Message)->Msg) \
{

Уберите коментарии.

Большое спасибо. Помогло. Но появилась другая проблемма.О ней в новом топике.

Вернуться в Вопросы программирования в C++Builder