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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2008, 10:55   #1
Selebro
Пользователь
 
Аватар для Selebro
 
Регистрация: 18.10.2008
Сообщений: 31
Вопрос проблема с глобальным объектом

народ помогите:

есть файл form1.h подключенный:
Код:
#include "stdafx.h"
#include "Form1.h"


using namespace lab1;

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
	// Enabling Windows XP visual effects before any controls are created
	Application::EnableVisualStyles();
	Application::SetCompatibleTextRenderingDefault(false); 
	
	// Create the main window and run it
	Application::Run(gcnew Form1());
	return 0;
}
в нем идет описание 2 классов: tree , созданный мною и form
проблема в том что локально созданный объект инициализируется конструктором и использует созданные методы, а глобальный- виден из локальной области
private: System::Void textBox3_KeyDown(System::Object^ sender, System::Windows::Forms::KeyEventArg s^ e)

{...}
но не изменяет своих значений во всех полях: key left.key и прочее.
как сделать правильно,оставив общий вид программы не тронутым?
Selebro вне форума Ответить с цитированием
Старый 23.11.2008, 10:59   #2
Selebro
Пользователь
 
Аватар для Selebro
 
Регистрация: 18.10.2008
Сообщений: 31
По умолчанию

Код:
#pragma once
#include "stdafx.h"
#include "stdio.h"
#include <string>
#include <iostream>
#include <stdlib.h>
#include <vcclr.h>
#include <cstring>
#include <fstream>
#include <sstream>
#include <io.h>
#include <fcntl.h>
#include <share.h>
#include <math.h>
#include "float.h"

#include "OutDraw.h"


using namespace std;
using namespace System;
using namespace System::IO;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace System::Runtime::InteropServices;

class tree
{
public:
	int key;
	tree *left;
	tree *right;
	tree *parent;
	
	tree(): key(NULL),left(NULL),right(NULL),parent(NULL){};
public:	void AddNode0Red(int value,int l,int r)
		{
		key=value;
		left=new tree;
		left->key=l;
		right=new tree;
		right->key=r;
		}

};
tree GlobalFirst;

namespace lab1 {



	public ref class Form1 : public System::Windows::Forms::Form
	{
	public:
		Form1(void)
		{
			InitializeComponent();
			//
			//TODO: Add the constructor code here
			//
		}
		int	StrToInt(String ^str)
		{
			char *ch=(char*)(void*)Marshal::StringToHGlobalAnsi(str);
			int value=atoi(ch);
			return(value);
		}
		char* StrToChar(String ^str)
		{
		char *ch=(char*)(void*)Marshal::StringToHGlobalAnsi(str);
		return(ch);
		}
		int* intf(String ^in,int *pa)
		{
			sscanf_s(StrToChar(in),"%i %i %i",&pa[0],&pa[1],&pa[2]);
			return(pa);
		}

		void draw0(String ^s1,String ^s2,String ^s3)
		{
		System::Drawing::Pen^ pntest=gcnew System::Drawing::Pen(System::Drawing::Color::Red);
		System::Drawing::Font^ fnt=gcnew System::Drawing::Font("System",8);
		SolidBrush^ SB=gcnew SolidBrush(Color::Black);
		PointF point1=PointF(508,123);
		PointF point2=PointF(178,163);
		PointF point3=PointF(878,163);
		System::Drawing::Graphics^ formGraphics;
		formGraphics = this->CreateGraphics();
		formGraphics->DrawEllipse(pntest,Rectangle(497,115,30,30));
		formGraphics->DrawLine(pntest,512,145,182,155);
		formGraphics->DrawLine(pntest,512,145,882,155);
		formGraphics->DrawString(s1,fnt,SB,point1);
		formGraphics->DrawEllipse(pntest,Rectangle(167,155,30,30));
		formGraphics->DrawString(s2,fnt,SB,point2);
		formGraphics->DrawEllipse(pntest,Rectangle(867,155,30,30));
		formGraphics->DrawString(s3,fnt,SB,point3);
		//System::Drawing::Pen^ pntest0=gcnew System::Drawing::Pen(Color::Gainsboro);
		//formGraphics->DrawEllipse(pntest0,Rectangle(497,115,30,30));
		delete fnt;
		delete pntest;
		delete formGraphics;
		}


	protected:
		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		~Form1()
		{
			if (components)
			{
				delete components;
			}
		}
	private: System::Windows::Forms::Button^  button1;
	private: System::Windows::Forms::Button^  button2;





	private: System::Windows::Forms::TextBox^  textBox3;
	private: System::Windows::Forms::Label^  label3;
	private: System::Windows::Forms::Label^  label4;
	private: System::Windows::Forms::TextBox^  textBox4;
	private: System::Windows::Forms::TextBox^  textBox1;
	private: System::Windows::Forms::Label^  label1;
	private: System::Windows::Forms::Button^  button4;
	private: System::Windows::Forms::Label^  label2;
	
...........
...........     ////здесь я опустил описание свойств кнопок и прочее
...........
#pragma endregion
	private: System::Void textBox3_KeyDown(System::Object^  sender, System::Windows::Forms::KeyEventArgs^  e) 
			 
			{
				if(e->KeyCode==Keys::Enter)
				{
				String ^input=gcnew String(this->textBox3->Text);
				int pa0[3];
				int *pp=&pa0[0];
				int *todo=intf(input,pp);
				int swap;
				if(todo[1]>todo[2])
				{
				swap=todo[1];todo[1]=todo[2];todo[2]=swap;
				}
				if(todo[1]<=todo[0]&&todo[2]>=todo[0])
				{
                                tree x;
				x.AddNode0Red(todo[0],todo[1],todo[2]);  //так работает
				GlobalFirst.AddNode0Red(todo[0],todo[1],todo[2]);  //так не работает
				//GlobalFirst.key=x.key; //так тоже не работает
				}
				String ^o1=todo[0].ToString();
				String ^o2=todo[1].ToString();
				String ^o3=todo[2].ToString();
				draw0(o1,o2,o3);
				}
			}
};
}
Selebro вне форума Ответить с цитированием
Старый 23.11.2008, 23:22   #3
Selebro
Пользователь
 
Аватар для Selebro
 
Регистрация: 18.10.2008
Сообщений: 31
По умолчанию

фактически необходимо создать объект класса tree,который бы существовал от начала до конца программы и мог бы быть доступен из любого метода класса формы.
как сделать объект глобально объявленным?
Selebro вне форума Ответить с цитированием
Старый 26.11.2008, 20:22   #4
Selebro
Пользователь
 
Аватар для Selebro
 
Регистрация: 18.10.2008
Сообщений: 31
Счастье

закрывайте,разобрался....
дело было в том что visual`овский watch не показывает значения глобальных переменных в текущий момент времени и пишет "out of scope"
поэтому я думал что переменная не определена+ запутался с пространствами имен.
Selebro вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема eldar Работа с сетью в Delphi 12 05.10.2008 18:10
Задача про работу с некоторым конструктивным объектом (напр. матрицей, графом, и т. д.) ACE Valery Помощь студентам 2 03.05.2008 19:22
Проблема Vanek B Общие вопросы Delphi 4 17.12.2006 13:30