На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> Ambiguity between 'Windows' , помогите разобраться
    Допустим, у меня есть 3 формы. На формах 1 и 2 есть компоненты TWordApplication. Я создаю коды для работы с Вордом на этих формах, работаю с таблицами и все прекрасно работает. На форме 3 мне тоже нужно работать с Вордом. Я подумала, а зачем мне плодить компонент, когда могу сослаться на тот, который уже есть на форме 1. Так и сделала. Все работает.
    Потом я подумала, а зачем мне тогда тот же компонент на 2 форме. Я его уберу, а сделаю ссылку для Application на форму 1 (ну как в форме 3). Но не тут то было. Появилось огромное количество сообщений типа
    Цитата
    [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'
    и куча библиотек, где якобы я должна исправить Windows на 'Word_2k::Windows'. Но во первых, править библиотеку нежелательно, а во-вторых, например, такой вариант 'Word_2k::Windows::Dialogs выдает ошибку (это единичный пример, а их множество).
    Когда компонент TWordApplication возвратила на форму 2 и убрала ссылку, все заработало.
    Кто мне может объяснить, что это за фигня такая? :ph34r:
      Попробовать поменять местами порядок инклудов в юните.
      Для более точного ответа надо видеть код.
        Цитата Chow @
        Попробовать поменять местами порядок инклудов в юните.
        Для более точного ответа надо видеть код.

        А каких конкретно инклюдов?
        И код какой представить? Где библиотеки прописаны?
          Ну ведь что-бы видеть на второй форме компоненту TWordApplication, которая на первой форме нужно подключить во второй форме хидер первой формы. _Наверное_ во второй форме кроме этого инклуда стоят еще какие-то. Иак вот: попробуй сделать так, что-бы инклуд хидера формы где TWordApplication стоял последний в списке, и в h-файле что-бы #include "Word_2K_SRVR.h" тоже был в конце.
            Я попробую поварьировать. Пока не получается.
              Явно указать откуда вызываеться ф-ция.
                В *.h второй формы можно вообще не подключать "Word_2K_SRVR.h", а только в срр подключить h-файл первой формы.
                  Цитата Adil @
                  В *.h второй формы можно вообще не подключать "Word_2K_SRVR.h", а только в срр подключить h-файл первой формы.

                  Да что тут гадать. :) Тут код надо видеть.
                    Цитата Adil @
                    В *.h второй формы можно вообще не подключать "Word_2K_SRVR.h", а только в срр подключить h-файл первой формы.

                    Да я так и делаю.

                    -юсртыхэю
                    Цитата Chow @
                    Цитата Adil @
                    В *.h второй формы можно вообще не подключать "Word_2K_SRVR.h", а только в срр подключить h-файл первой формы.

                    Да что тут гадать. :) Тут код надо видеть.

                    Да я эту просьбу встретила без энтузиазма. Код то большой. Что конкретно от меня нужно? Только то, что связано с Вордом?

                    -юсртыхэю
                    Цитата Bas @
                    Явно указать откуда вызываеться ф-ция.

                    А как это сделать? Я, наверное, не знаю... :unsure:
                      Цитата Chow @
                      Ну ведь что-бы видеть на второй форме компоненту TWordApplication, которая на первой форме нужно подключить во второй форме хидер первой формы. _Наверное_ во второй форме кроме этого инклуда стоят еще какие-то. Иак вот: попробуй сделать так, что-бы инклуд хидера формы где TWordApplication стоял последний в списке, и в h-файле что-бы #include "Word_2K_SRVR.h" тоже был в конце.

                      Увы... :'( Это не помогло. Даже удивительно, что есть ссылка на библиотеку RXCtrl.hpp, хотя ни в одной из этих форм компоненты быблиотеки не использованы. В других есть, но они то причем?
                        Цитата laifik @
                        Что конкретно от меня нужно?

                        Строку где возникает ошибка , и текст ошибки.
                          Цитата 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, где прописана библиотека Ворда, работаю на новой форме с компонентом. И все работает. Но стоит мне только кинуть компонент на новую форму, а потом его убрать, как сразу лезут ошибки. Как- будто где-то что-то прописалось.
                          Сообщение отредактировано: laifik -
                            Обычно прописывается соответствующий компоненту заголовочный файл в *.h-файле формы
                              М-м...
                              Так, еще раз по порядку:
                              1. Строчка:
                              ExpandedWrap disabled
                                #include "Word_2K_SRVR.h"

                              есть в каком-то из модулей?
                              2. Если есть (а она должна быть в той форме, на какой лежит TWordApplication), то ставим ее в самый конец списка инклудов.
                              3. Если хидер формы из п.2 подключают другие юниты (а в твоем примере это форма 2 и 3) - то эту строчку подключения, типа:
                              ExpandedWrap disabled
                                #include "Form1_.h"

                              тоже поставь в самый конец списка инклудов на каждом из юнитов.

                              Добавлено
                              Цитата laifik @
                              Но стоит мне только кинуть компонент на новую форму, а потом его убрать, как сразу лезут ошибки. Как- будто где-то что-то прописалось.

                              Да не "как-будто", а таки прописалось.
                              Блин, laifik, вы уже не первый год "программируете" но не перестаете меня удивлять своей... :wall:
                                Цитата Adil @
                                Обычно прописывается соответствующий компоненту заголовочный файл в *.h-файле формы

                                Да нет. Я отслеживаю, чтобы заголовочный файл отсутствовал. Я имела ввиду какую-то скрытую прописку.
                                Цитата
                                Да не "как-будто", а таки прописалось.

                                То, что очевидно, я вижу. Есть какой-то скрытый момент, в котором хочу разобраться.
                                Цитата
                                Блин, laifik, вы уже не первый год "программируете" но не перестаете меня удивлять своей...

                                Я бы не взяла на себя смелость кого-то осуждать. Вы ведь не знаете, сколько, какой сложности и что я сделала за это время. Бывают моменты, которые сразу не доходят. Это происходит от недостатка информации. Вот когда по крупицам ее соберу, вопрос "ляжет" сам собою.
                                Что касается Вашего совета, он не снимает ошибки. Я еще вчера почитала внимательно сообщение и постаралась аккуратно его произвести. Но, увы...
                                  Никакой скрытой прописки нет.
                                  У меня и компилится, и работает, что до добавления, что во время, что после.
                                  Где-то Вы в инклюдниках запутались.
                                  Если присмотреться к тексту ошибок
                                  Цитата
                                  [C++ Error] FileCtrl.hpp(70): E2015 Ambiguity between 'Windows' and 'Word_2k::Windows'
                                  Видно, что при компиляции в тот момент, когда обрабатывается подключаемый FileCtrl.hpp (не обязательно явно подключаемый, скорее всего через другии hpp), компилятор уже "прошелся" по какому-то из "офисных" заголвочных файлов. Так что всё-таки повнимательней проверьте порядок подключения.
                                  Можно по-наставить до и после строчек подключения файлов дирректив типа
                                  ExpandedWrap disabled
                                    #pragma message "Befor vcl.h"
                                    #include <vcl.h>
                                    #pragma message "After vcl.h"
                                  и по появляющимся сообщениям (надо еще поставить галку у "Show general messages" в опциях проекта, вкладка "Compiliеr", правый нижний угол) отследить порядок подключения.
                                    Спасибо. Это уже существенно.
                                    По Рамблеру нашла кучу таких вопросов, но только один раз ответ, что в данной ситуации модет помочь перестановка инклюдов (как Chow подсказал). А связи с чем, ответа нет. Теперь связь ясна.
                                      Как выяснилось, в этом вопросе у меня пробел. Никогда не задумывалась о порядке подключения инклюдов. Добавляла компонент - прописывала библиотеку. Сделала огромную программу и ни разу не было двойственности в связи с подключением. Если бы не захотела удалить компонент, то и вопроса не возникло бы.
                                      Попробовала отследить порядок подключения, оставив главную форму, и создав новую. В главной форме такие библиотеки:
                                      ExpandedWrap disabled
                                        #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"

                                      В новой:
                                      ExpandedWrap disabled
                                        #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 двойственности нет.
                                      Если возможно, объясните, пожалуйста, каким образом можно узнать порядок прохождения библиотек не явно подключаемых. Комбинация
                                      ExpandedWrap disabled
                                        #pragma message "Befor vcl.h"
                                        #include <vcl.h>
                                        #pragma message "After vcl.h"

                                      мне ничего не дала, все подключила, а сообщений нет. Может дадите ссылку, где об этом можно почитать?
                                        Цитата laifik @
                                        Но как только прописываю библиотеку DBGridEh.hpp, сразу появляется двойственность
                                        У меня компилируется без ошибок.
                                        Цитата laifik @
                                        Может дадите ссылку, где об этом можно почитать?
                                        В хэлпе билдера, индекс - pragma

                                        Цитата Adil @
                                        надо еще поставить галку у "Show general messages" в опциях проекта, вкладка "Compiliеr", правый нижний угол
                                        ?
                                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                        0 пользователей:


                                        Рейтинг@Mail.ru
                                        [ Script execution time: 0,0962 ]   [ 16 queries used ]   [ Generated: 25.01.26, 17:46 GMT ]