Страница 1 из 2
Создание глобальной переменной в классе Form.h
Добавлено: 24 окт 2009, 11:29
SHIMA
Суть проблемы заключается в том что я хочу созадать глобальную переменную перед классом форм, мне это нужно для того что бы во всех функциях класса форма была она доступна.
Эта переменная типа объекта.
У меня есть 2 класса 1-работа с битами 2-создание множества в котором содержится поле типа 1 класса.
Проблема в том что при создание глобальной переменной она создается но в ней не то что нужно, тоесть она не правильно создается хотя конструкторы срабатывают правильно, что я заметел это то как будто конструкторы работают не с тем this потому что в ней как содержался мусор так и остается.
Но что смею заметить в функциях формы объекты создаются правильно
Что же это может быть, я уже не знаю на что думать, перепробовал все. просмотрел конструкторы все гуд.
Помогите решить,если кто сталкивался.
Вот мой проект полностью на VS
Re: Создание глобальной переменной в классе Form.h
Добавлено: 24 окт 2009, 12:06
Romeo
Проект большой, в него нужно долго вникать. Ты можешь создать упрощённый вариант, использующий ту же архитектуру и содержащий ту же проблему и выложить его код прямо сюда, на форум? Попробуем тебе помочь.
Re: Создание глобальной переменной в классе Form.h
Добавлено: 24 окт 2009, 16:14
SHIMA
Тут по сути не надо понимать проект, вы попробуйте запустите отладчик и точку останова рядом с SetPower st(100) в Form1.h и посмотрите что происходет, может вы поймете что не так.
[ code=cpp ]
#include "stdafx.h" // запуск формы тут подключаю хидер формы
#include <ctime>
#include "Form1.h"
using namespace multipower;
int main(array<System::String ^> ^args){}
Form1.h
#pragma once
#include "SetPower.h"
#include "GlobalVar.h"
SetPower st(100);//cоздаю глобальную переменную но она не создается правильно.
функция формы
private: System::Void button1_Click(.....) {
SetPower temp(n);//в функции объект создается правильно
st=temp;//не пойму почему st не меняется а меняется this хоть он по сути то и должен отвечать за st но почему то st не меняется
}
};
Ну и сами классы для создания обекта
#if !defined( TBitField_H_)
#define TBitField_H_
#include "stdafx.h"
#include <iostream>
typedef int MINT;
class TBitField {
public:
int BitLen;
int* pMem;
int BMemSize;
public:
TBitField(int );
TBitField(const TBitField& TBitO);
~TBitField(){delete pMem;}
};
#endif
Конструкторы для класса выше
#include "stdafx.h"
#include "TBitField.h"
TBitField::TBitField(int size)
{
BitLen=size;
BMemSize = BitLen/(sizeof(int)*8) + 1;
pMem = new int[BMemSize];
for(int i=0; i<BMemSize; i++)
pMem=0;
}
TBitField::TBitField(const TBitField& TBitO)
{
BitLen=TBitO.BitLen;
BMemSize=TBitO.BMemSize;
pMem = new int[BMemSize];
for(int i=0;i<BMemSize; i++)
pMem=TBitO.pMem;
}
Класс множество
#ifndef SetPower_H_
#define SetPower_H_
#include "stdafx.h"
#include "TBitField.h"
class SetPower{
private:
int MaxPower;
public:
TBitField BitField;
public:
SetPower(int );
SetPower(const SetPower &Set);
SetPower(const TBitField &TBitO);
};
#endif
конструкторы
#include "stdafx.h"
#include "SetPower.h"
#include "GlobalVar.h"
SetPower::SetPower(int size):BitField(size),MaxPower(size){}
SetPower::SetPower(const SetPower &Set):MaxPower(Set.MaxPower), BitField(Set.BitField){}
SetPower::SetPower(const TBitField &TBitO):MaxPower(TBitO.GetLens()),BitField(TBitO){}
[ /code ]
Re: Создание глобальной переменной в классе Form.h
Добавлено: 26 окт 2009, 10:33
BBB
SHIMA писал(а):SetPower st(100);//cоздаю глобальную переменную но она не создается правильно.
А можно рассказать, что/как именно "не создается правильно"?
Т.е., судя по тексту, ожидается, что будет выделена пямять в размере на 100 бит и заполнена нулями.
А что происходит?
Re: Создание глобальной переменной в классе Form.h
Добавлено: 26 окт 2009, 11:43
atavin-ta
100 бит выделить нельзя. Или 96, ли 104, а для ста нужен указатель на бит или на полубайт, а такого под системами от мелкософта нет.
Re: Создание глобальной переменной в классе Form.h
Добавлено: 26 окт 2009, 20:00
SHIMA
Да тут выделяет не именно биты а байты под 100 выделяет 4 байта. но это не суть важно. Проблема в том что вызов конструкторов для построения объектов срабатывает нормально но вот создаваемая переменная не меняется, так и содержит мусор.
Я посто уже не знаю как объяснить, проще всего запустить с точкой останова на месте объявления и поом F11 и сразу понятно что какойто this меняется а вот сам объект нет, хотя в функциях нормально все.
Re: Создание глобальной переменной в классе Form.h
Добавлено: 27 окт 2009, 01:37
BBB
"Шаманское" предположение. Может, попробовать вынести SetPower st(100); из h-файла в cpp-файл? Может, это как-то "фонит"?
Re: Создание глобальной переменной в классе Form.h
Добавлено: 27 окт 2009, 01:38
SHIMA
Пробовал, ситуация та же.
Re: Создание глобальной переменной в классе Form.h
Добавлено: 30 окт 2009, 08:16
atavin-ta
попробуй extern <класс формы> <имя формы>;
Сама форма должна стать глобальной. То есть не глобальная переменная в классе, а глобальная переменная класса, то есть глобальный экземпляр, а не глобальный член.
Re: Создание глобальной переменной в классе Form.h
Добавлено: 01 ноя 2009, 22:23
SHIMA
Что то я не понял как, можно примерчик?