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, может чем поможет.
|
|
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) |
Это ни на что не повлияло |
|
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) \
{ |
Уберите коментарии. |
Большое спасибо. Помогло. Но появилась другая проблемма.О ней в новом топике. |
|