сбой системы после объявления глобального объекта класса - PullRequest
0 голосов
/ 16 апреля 2010

Я очень плохо знаком с C ++. Я получаю сбой системы (не ошибка компиляции) при выполнении следующих действий:

Я объявляю глобальный указатель класса.

BGiftConfigFile  *bgiftConfig;
class BGiftConfigFile : public EftBarclaysGiftConfig { }

в этом классе я читаю теги из файла XML. это сбой системы, когда этот указатель используется для получения значения. Я делаю кодирование для проверенного терминала.

int referenceSetting = bgiftConfig->getreferencesetting(); //system error

getreferencesetting () является функцией-членом класса EftBarclaysGiftConfig

Меня смущает поведение указателя в этом случае. Я знаю, что делаю что-то не так, но не могу это исправить.

Когда я объявляю один объект класса локально, он правильно получает значение.

BGiftConfigFile  bgiftConfig1; 
int referenceSetting = bgiftConfig1.getreferencesetting(); //working

Но если я объявлю этот объект глобальным, это также приведет к сбою системы.

Мне нужно получить значения в другом месте моего кода, поэтому я вынужден использовать что-то глобальное.

Как исправить эту проблему?

Ответы [ 3 ]

1 голос
/ 16 апреля 2010

Сначала объявите класс BGiftConfigFile, а затем объявите указатель на объект класса следующим образом

class BGiftConfigFile
 BGiftConfigFile  *bgiftConfig;
class BGiftConfigFile : public EftBarclaysGiftConfig { };

Затем выделите место для вашего объекта указателя, используя новый оператор

bgiftConfig = new BGiftConfigFile(); // depends upon what constructors you have defined in your class

После того, как вы закончите указатель, удалите его, используя оператор удаления

delete bgiftConfig;
1 голос
/ 16 апреля 2010

Мне нужно получить значения в другом месте моего кода, поэтому я вынужден использовать someting global.

Нет, вам не нужно что-то глобальное. Вы можете передать свой неглобальный экземпляр этого объекта коду, который нуждается в этом.

1 голос
/ 16 апреля 2010

Ваш локальный экземпляр является выделенным стеком.

Ваш глобальный является указателем и должен быть выделен через вызов к новому, прежде чем начать его использовать:

bgiftConfig = new BGiftConfigFile();
...