Ambiguity between 'Windows'
, помогите разобраться
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.214] |
|
|
Ambiguity between 'Windows'
, помогите разобраться
|
|
|
|
|
Допустим, у меня есть 3 формы. На формах 1 и 2 есть компоненты TWordApplication. Я создаю коды для работы с Вордом на этих формах, работаю с таблицами и все прекрасно работает. На форме 3 мне тоже нужно работать с Вордом. Я подумала, а зачем мне плодить компонент, когда могу сослаться на тот, который уже есть на форме 1. Так и сделала. Все работает.
Потом я подумала, а зачем мне тогда тот же компонент на 2 форме. Я его уберу, а сделаю ссылку для Application на форму 1 (ну как в форме 3). Но не тут то было. Появилось огромное количество сообщений типа Цитата и куча библиотек, где якобы я должна исправить Windows на 'Word_2k::Windows'. Но во первых, править библиотеку нежелательно, а во-вторых, например, такой вариант 'Word_2k::Windows::Dialogs выдает ошибку (это единичный пример, а их множество).[C++ Error] ComCtrls.hpp(2638): E2015 Ambiguity between 'Windows' and 'Word_2k::Windows' [C++ Error] ComCtrls.hpp(3706): E2015 Ambiguity between 'Menus' and 'Word_2k::Menus' Когда компонент TWordApplication возвратила на форму 2 и убрала ссылку, все заработало. Кто мне может объяснить, что это за фигня такая? |
|
Сообщ.
#2
,
|
|
|
|
Попробовать поменять местами порядок инклудов в юните.
Для более точного ответа надо видеть код. |
|
Сообщ.
#3
,
|
|
|
|
Цитата Chow @ Попробовать поменять местами порядок инклудов в юните. Для более точного ответа надо видеть код. А каких конкретно инклюдов? И код какой представить? Где библиотеки прописаны? |
|
Сообщ.
#4
,
|
|
|
|
Ну ведь что-бы видеть на второй форме компоненту TWordApplication, которая на первой форме нужно подключить во второй форме хидер первой формы. _Наверное_ во второй форме кроме этого инклуда стоят еще какие-то. Иак вот: попробуй сделать так, что-бы инклуд хидера формы где TWordApplication стоял последний в списке, и в h-файле что-бы #include "Word_2K_SRVR.h" тоже был в конце.
|
|
Сообщ.
#5
,
|
|
|
|
Я попробую поварьировать. Пока не получается.
|
|
Сообщ.
#6
,
|
|
|
|
Явно указать откуда вызываеться ф-ция.
|
|
Сообщ.
#7
,
|
|
|
|
В *.h второй формы можно вообще не подключать "Word_2K_SRVR.h", а только в срр подключить h-файл первой формы.
|
|
Сообщ.
#8
,
|
|
|
|
Цитата Adil @ В *.h второй формы можно вообще не подключать "Word_2K_SRVR.h", а только в срр подключить h-файл первой формы. Да что тут гадать. Тут код надо видеть. |
|
Сообщ.
#9
,
|
|
|
|
Цитата Adil @ В *.h второй формы можно вообще не подключать "Word_2K_SRVR.h", а только в срр подключить h-файл первой формы. Да я так и делаю. -юсртыхэю Цитата Chow @ Цитата Adil @ В *.h второй формы можно вообще не подключать "Word_2K_SRVR.h", а только в срр подключить h-файл первой формы. Да что тут гадать. Тут код надо видеть.Да я эту просьбу встретила без энтузиазма. Код то большой. Что конкретно от меня нужно? Только то, что связано с Вордом? -юсртыхэю Цитата Bas @ Явно указать откуда вызываеться ф-ция. А как это сделать? Я, наверное, не знаю... |
|
Сообщ.
#10
,
|
|
|
|
Цитата Chow @ Ну ведь что-бы видеть на второй форме компоненту TWordApplication, которая на первой форме нужно подключить во второй форме хидер первой формы. _Наверное_ во второй форме кроме этого инклуда стоят еще какие-то. Иак вот: попробуй сделать так, что-бы инклуд хидера формы где TWordApplication стоял последний в списке, и в h-файле что-бы #include "Word_2K_SRVR.h" тоже был в конце. Увы... Это не помогло. Даже удивительно, что есть ссылка на библиотеку RXCtrl.hpp, хотя ни в одной из этих форм компоненты быблиотеки не использованы. В других есть, но они то причем? |
|
Сообщ.
#11
,
|
|
|
|
Цитата laifik @ Что конкретно от меня нужно? Строку где возникает ошибка , и текст ошибки. |
|
Сообщ.
#12
,
|
|
|
|
Цитата Bas @ Строку где возникает ошибка , и текст ошибки. В самом коде никакой ошибки нет. А выдается перечень стандартных библиотек Билдера такого плана. Например Цитата [C++ Error] FileCtrl.hpp(70): E2015 Ambiguity between 'Windows' and 'Word_2k::Windows' Выхожу на строку Цитата virtual void __fastcall DrawItem(int Index, const Types::TRect &Rect, Windows::TOwnerDrawState State); Цитата - на строку[C++ Error] RXCtrls.hpp(297): E2015 Ambiguity between 'Windows' and 'Word_2k::Windows' Цитата илиvirtual void __fastcall DrawItem(int Index, const Types::TRect &Rect, Windows::TOwnerDrawState State); Цитата - на строку[C++ Error] VCLUtils.hpp(118): E2015 Ambiguity between 'Dialogs' and 'Word_2k::Dialogs' Цитата extern PACKAGE Word __fastcall MsgDlg(const AnsiString Msg, Dialogs::TMsgDlgType AType, Dialogs::TMsgDlgButtons AButtons, int HelpCtx); Перечень ошибок не маленький. Как только компонент TWordApplication возвращаю на форму, ошибки исчезают. И еще один момент. Допустим, компонент у меня есть на форме 1. Создаю новую форму, делаю ссылку на форму 1, где прописана библиотека Ворда, работаю на новой форме с компонентом. И все работает. Но стоит мне только кинуть компонент на новую форму, а потом его убрать, как сразу лезут ошибки. Как- будто где-то что-то прописалось. |
|
Сообщ.
#13
,
|
|
|
|
Обычно прописывается соответствующий компоненту заголовочный файл в *.h-файле формы
|
|
Сообщ.
#14
,
|
|
|
|
М-м...
Так, еще раз по порядку: 1. Строчка: ![]() ![]() #include "Word_2K_SRVR.h" есть в каком-то из модулей? 2. Если есть (а она должна быть в той форме, на какой лежит TWordApplication), то ставим ее в самый конец списка инклудов. 3. Если хидер формы из п.2 подключают другие юниты (а в твоем примере это форма 2 и 3) - то эту строчку подключения, типа: ![]() ![]() #include "Form1_.h" тоже поставь в самый конец списка инклудов на каждом из юнитов. Добавлено Цитата laifik @ Но стоит мне только кинуть компонент на новую форму, а потом его убрать, как сразу лезут ошибки. Как- будто где-то что-то прописалось. Да не "как-будто", а таки прописалось. Блин, laifik, вы уже не первый год "программируете" но не перестаете меня удивлять своей... |
|
Сообщ.
#15
,
|
|
|
|
Цитата Adil @ Обычно прописывается соответствующий компоненту заголовочный файл в *.h-файле формы Да нет. Я отслеживаю, чтобы заголовочный файл отсутствовал. Я имела ввиду какую-то скрытую прописку. Цитата Да не "как-будто", а таки прописалось. То, что очевидно, я вижу. Есть какой-то скрытый момент, в котором хочу разобраться. Цитата Блин, laifik, вы уже не первый год "программируете" но не перестаете меня удивлять своей... Я бы не взяла на себя смелость кого-то осуждать. Вы ведь не знаете, сколько, какой сложности и что я сделала за это время. Бывают моменты, которые сразу не доходят. Это происходит от недостатка информации. Вот когда по крупицам ее соберу, вопрос "ляжет" сам собою. Что касается Вашего совета, он не снимает ошибки. Я еще вчера почитала внимательно сообщение и постаралась аккуратно его произвести. Но, увы... |
|
Сообщ.
#16
,
|
|
|
|
Никакой скрытой прописки нет.
У меня и компилится, и работает, что до добавления, что во время, что после. Где-то Вы в инклюдниках запутались. Если присмотреться к тексту ошибок Цитата Видно, что при компиляции в тот момент, когда обрабатывается подключаемый FileCtrl.hpp (не обязательно явно подключаемый, скорее всего через другии hpp), компилятор уже "прошелся" по какому-то из "офисных" заголвочных файлов. Так что всё-таки повнимательней проверьте порядок подключения.[C++ Error] FileCtrl.hpp(70): E2015 Ambiguity between 'Windows' and 'Word_2k::Windows' Можно по-наставить до и после строчек подключения файлов дирректив типа ![]() ![]() #pragma message "Befor vcl.h" #include <vcl.h> #pragma message "After vcl.h" |
|
Сообщ.
#17
,
|
|
|
|
Спасибо. Это уже существенно.
По Рамблеру нашла кучу таких вопросов, но только один раз ответ, что в данной ситуации модет помочь перестановка инклюдов (как Chow подсказал). А связи с чем, ответа нет. Теперь связь ясна. |
|
Сообщ.
#18
,
|
|
|
|
Как выяснилось, в этом вопросе у меня пробел. Никогда не задумывалась о порядке подключения инклюдов. Добавляла компонент - прописывала библиотеку. Сделала огромную программу и ни разу не было двойственности в связи с подключением. Если бы не захотела удалить компонент, то и вопроса не возникло бы.
Попробовала отследить порядок подключения, оставив главную форму, и создав новую. В главной форме такие библиотеки: ![]() ![]() #ifndef MenuFormH #define MenuFormH //--------------------------------------------------------------------------- #include <Buttons.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <Controls.hpp> #include <Classes.hpp> #include <math.h> #include <ComCtrls.hpp> #include "glBevel.hpp" #include "glLabel.hpp" #include <ExtCtrls.hpp> #include <Graphics.hpp> #include <ImgList.hpp> #include <OleServer.hpp> #include <ToolWin.hpp> #include <ExtCtrls.hpp> #include <DBCtrls.hpp> #include <Menus.hpp> #include "glLabel.hpp" #include "glBevel.hpp" #include <ImgList.hpp> #include "PrViewEh.hpp" #include "Word_2K_SRVR.h" В новой: ![]() ![]() #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ADODB.hpp> #include <ComCtrls.hpp> #include <DB.hpp> #include <Dialogs.hpp> #include <ImgList.hpp> #include <Menus.hpp> #include <ComCtrls.hpp> //TPageControl #include <Buttons.hpp> //TSpeedButton #include "DBGridEh.hpp" //TDBGridEh Пока и с Вордом не работаю. Но как только прописываю библиотеку DBGridEh.hpp, сразу появляется двойственность. Включительно по Buttons.hpp двойственности нет. Если возможно, объясните, пожалуйста, каким образом можно узнать порядок прохождения библиотек не явно подключаемых. Комбинация ![]() ![]() #pragma message "Befor vcl.h" #include <vcl.h> #pragma message "After vcl.h" мне ничего не дала, все подключила, а сообщений нет. Может дадите ссылку, где об этом можно почитать? |
|
Сообщ.
#19
,
|
|
|
|
Цитата laifik @ У меня компилируется без ошибок.Но как только прописываю библиотеку DBGridEh.hpp, сразу появляется двойственность Цитата laifik @ В хэлпе билдера, индекс - pragmaМожет дадите ссылку, где об этом можно почитать? Цитата Adil @ ? надо еще поставить галку у "Show general messages" в опциях проекта, вкладка "Compiliеr", правый нижний угол |