Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2011, 14:16   #1
Neverworld
 
Аватар для Neverworld
 
Регистрация: 24.05.2011
Сообщений: 9
Печаль CLR C++ Глобальный массив

Всем привет. Суть в том что мне нужно создать масссив структур и использовать и изменять его в разных функциях, но они его не видят


Код:
#include "StdAfx.h"
#include "Form1.h"


using namespace QW;

ref struct PBS{
public: int kol;
};

System::Void Form1::Form1_Shown(System::Object^  sender, System::EventArgs^  e)
{   
	
  	array<PBS^> ^q = gcnew array<PBS^>(5);
		for (int i=0;i<5;i++)
		q[i]=gcnew PBS;
	Form1::label1->Text="ololo";	
	q[3]->kol=2;

}

System::Void Form1::button1_Click(System::Object^  sender, System::EventArgs^  e)
{
		

	Form1::label1->Text=Convert::ToString(q[3]->kol);

}
"Я - Экзорцист, мне сила дана верить и не сойти с ума" (С) Арда.
Neverworld вне форума Ответить с цитированием
Старый 07.11.2011, 14:21   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Как объявлен q во втором методе? В первом Вы создаёте такую локальную переменную (которая переопределяет символ q в пределах функции, если глобальный массив q существовал), а во втором?
Abstraction вне форума Ответить с цитированием
Старый 07.11.2011, 14:29   #3
Neverworld
 
Аватар для Neverworld
 
Регистрация: 24.05.2011
Сообщений: 9
По умолчанию

В этом примере никак во 2 методе q необъявлена) Вот мне и нужно узнать как её можно объявить глобально за пределами обоих методов и еще и инициализировать массив.

Пробовал сделать объявление и создание в конструкторе формы:

Код:
public: array<PBS^> ^q;
public:
	Form1(void)
		{
		InitializeComponent();
		array<PBS^> ^q = gcnew array<PBS^>(5);
		for (int i=0;i<5;i++)
		q[i]=gcnew PBS;
       
		}
а сами методы вот такие:


Код:
System::Void Form1::Form1_Shown(System::Object^  sender, System::EventArgs^  e)
{   
	Form1::label1->Text="ololo";	
	q[3]->kol=2;

}

System::Void Form1::button1_Click(System::Object^  sender, System::EventArgs^  e)
{
		Form1::label1->Text=Convert::ToString(q[3]->kol);
}
При этом программа компилируется но вылетает с ошибкой:
В экземпляре объекта не задана ссылка на объект.

По отладчику видно что никаких массивов и не создалось
"Я - Экзорцист, мне сила дана верить и не сойти с ума" (С) Арда.
Neverworld вне форума Ответить с цитированием
Старый 07.11.2011, 14:32   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
...Вы создаёте такую локальную переменную (которая переопределяет символ q в пределах функции, если глобальный массив q существовал)...
Код:
        InitializeComponent();
        //Создать локальную переменную q - указатель на массив указателей на PBS
        //Дальше по тексту функции под q понимать именно эту переменную, а не что-либо за пределами функции
        array<PBS^> ^q = gcnew array<PBS^>(5);
Abstraction вне форума Ответить с цитированием
Старый 07.11.2011, 14:44   #5
Neverworld
 
Аватар для Neverworld
 
Регистрация: 24.05.2011
Сообщений: 9
По умолчанию

Цитата:
InitializeComponent();
//Создать локальную переменную q - указатель на массив указателей на PBS
//Дальше по тексту функции под q понимать именно эту переменную, а не что-либо за пределами функции
array<PBS^> ^q = gcnew array<PBS^>(5);
Во 2 моем примере я вроде так и делаю, но все равно не работает...или я что-то недопонял, что Вы имели ввиду.
"Я - Экзорцист, мне сила дана верить и не сойти с ума" (С) Арда.
Neverworld вне форума Ответить с цитированием
Старый 07.11.2011, 15:14   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Вы в конструкторе Form создаёте локальную переменную q и с ней работаете, игнорируя то, что у Вас есть одноимённый член класса (он "перекрывается" локальной переменной). На выходе из конструктора эта локальная q уничтожается, член класса остался неинициализированным.
Abstraction вне форума Ответить с цитированием
Старый 07.11.2011, 15:27   #7
Neverworld
 
Аватар для Neverworld
 
Регистрация: 24.05.2011
Сообщений: 9
По умолчанию

а где мне нужно объявить перемнную q в таком случае? чтоб она была глобальна, и я мог использовать её во всех методах?
"Я - Экзорцист, мне сила дана верить и не сойти с ума" (С) Арда.
Neverworld вне форума Ответить с цитированием
Старый 07.11.2011, 16:06   #8
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Ну, например, так, как она у Вас и объявлена - членом класса (только я бы занёс в private).
Abstraction вне форума Ответить с цитированием
Старый 07.11.2011, 16:37   #9
Neverworld
 
Аватар для Neverworld
 
Регистрация: 24.05.2011
Сообщений: 9
По умолчанию

а создавать экземпляры и иницализировать тогда как?(

Код:
 array<PBS^> ^q = gcnew array<PBS^>(5);
	   for (int i=0;i<5;i++)
	   q[i]=gcnew PBS;
если это делать в каком либо методе то из другого метода их не видно.
"Я - Экзорцист, мне сила дана верить и не сойти с ума" (С) Арда.
Neverworld вне форума Ответить с цитированием
Старый 07.11.2011, 16:53   #10
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

array<PBS^> ^q - это объявление новой переменной. Если переменная уже есть (в данном случае - является частью объекта this), её не надо объявлять, ей надо просто присвоить значение.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как объявить инициализировать глобальный массив Point в clr? scripto Visual C++ 0 07.04.2011 22:12
Массив int в clr 0479 Общие вопросы C/C++ 0 26.11.2010 20:19
Глобальный массив mavlon_m Общие вопросы Delphi 3 09.11.2010 11:53
сбрасывается Глобальный динамический массив... Izhic Общие вопросы Delphi 3 17.05.2009 23:29
Глобальный хук на мышь не глобальный О_о JTG Общие вопросы Delphi 3 05.06.2008 17:41