1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

Доступ к внешним переменным

Тема в разделе "Общие вопросы по С и С++", создана пользователем Sermak, 5 окт 2006.

Статус темы:
Закрыта.
  1. Sermak

    Sermak Гость

    Репутация:
    0
    Помогите с такой проблемой - в моем проекте (C++Builder 6) есть несколько модулей. И у меня по непонятной мне причине не возможно получить доступ в модуле к переменной, объявленной в другом модуле. Структура примерно следующая :
    Код:
    ////////////File1.h/////////////////////
    struct Ini
    {
    int data;
    Ini () {/*инициализация*/}
    };
    //--------------------------
    class Main
    {
    public:
    Ini Ini_data;
    Main () {/*инициализация*/}
    };
    
    Main *pMainGlobalObject; // его мы корректно создаем (инициализируем)
    // в этом же файле (точнее в .cpp файле) 
    ....
    ///////////File2.h/////////////////////////
    #ifndef File2H
    #define File2H
    #include "File1.h"
    //---------------------------
    class UserMain
    {
    public:
    void AccessMain ();
    };
    #endif
    //////////////////////////////////////////////////////////////////////////////////////
    /////////////File2.cpp//////////////////////////////
    #pragma hdrstop 
    #include "File2.h"
    #pragma package(smart_init)
    #pragma resource "*.dfm"		  
    // верхние четыре строки писал Builder
    extern Main *pMainGlobalObject;
    
    void UserMain::
    AccessMain ()
    {
    // ShowMessage(MainGlobalObject->Ini_data.data); // ошибка выполнения 
    /*Project MainPro.exe raised exception class EAccessViolation with
    at adress такой то in module MainPro.exe. Read of address и тд*/
    if (MainGlobalObject == 0) return; // здесь пройсходит выход
    // почему то pMainGlobalObject не инициализирован
    
    }
    Почему нет доступа к внешнему объекту? Конструкторы по умолчанию есть у всех классов
    Может что то в настройках есть, или это компилятор глючит.
    Какие могут вообще быть притчины?
    Спасибо за внимание.
     
  2. Maxx

    Maxx Гость

    Репутация:
    0
    в файле file2.cpp добавь строчку #include "file1.h", где объявляется класс Main
     
  3. Sermak

    Sermak Гость

    Репутация:
    0
    Нет, не то. В файле file2.cpp подключен file2.h в котором в свою очередь подключен file1.h. да и компилятор бы ругался, еслиб Main был не объявлен, а у меня программа компилируется.
     
  4. ????

    ???? Гость

    Репутация:
    0
    скорее всего MainGlobalObject не инициализирован или указатель указывает не туда. отладчик в помощь или полный исодник, т.к. телепаты в отпуске.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей