• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

  • Автор темы Sermak
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

Sermak

Помогите с такой проблемой - в моем проекте (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 не инициализирован

}
Почему нет доступа к внешнему объекту? Конструкторы по умолчанию есть у всех классов
Может что то в настройках есть, или это компилятор глючит.
Какие могут вообще быть притчины?
Спасибо за внимание.
 
M

Maxx

в файле file2.cpp добавь строчку #include "file1.h", где объявляется класс Main
 
S

Sermak

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

????

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!