| 
| scripto | Дата: Четверг, 07 Апреля 2011, 22:06 | Сообщение # 1 |  | был не раз Сейчас нет на сайте | Привет всем.Нужно объявить глобальный массив,и в другом месте создавать его динамически.Приложение типа windowsForm Application(visual studio 2008 c++).пробовал так: 
 Code #pragma once #include "Graphic.h"
 
 #define nmax = 1000;
 array<Point>^ points;
 int n = 0;    //количество вершин
 
 namespace graph_inwindowsform {
 
 using namespace System;
 using namespace System::ComponentModel;
 using namespace System::Collections;
 using namespace System::Windows::Forms;
 using namespace System::Data;
 using namespace System::Drawing;
 
 
 
 
 /// <summary>
 /// Сводка для Form1
 ///
 /// Внимание! При изменении имени этого класса необходимо также изменить
 ///          свойство имени файла ресурсов ("Resource File Name") для средства компиляции управляемого ресурса,
 ///          связанного со всеми файлами с расширением .resx, от которых зависит данный класс. В противном случае,
 ///          конструкторы не смогут правильно работать с локализованными
 ///          ресурсами, сопоставленными данной форме.
 /// </summary>
 public ref class Form1 : public System::Windows::Forms::Form
 {
 public:
 Form1(void)
 {
 InitializeComponent();
 //
 //TODO: добавьте код конструктора
 //
 points = gcnew array<Point>(1000);
 }
 
 protected:
 /// <summary>
 /// Освободить все используемые ресурсы.
 /// </summary>
 ~Form1()
 {
 if (components)
 {
 delete components;
 }
 }
 private: System::Windows::Forms::RadioButton^  radioButton1;
 protected:
 private: System::Windows::Forms::RadioButton^  radioButton2;
 
 private:
 /// <summary>
 /// Требуется переменная конструктора.
 /// </summary>
 System::ComponentModel::Container ^components;
 
 #pragma region Windows Form Designer generated code
 /// <summary>
 /// Обязательный метод для поддержки конструктора - не изменяйте
 /// содержимое данного метода при помощи редактора кода.
 /// </summary>
 void InitializeComponent(void)
 {
 this->radioButton1 = (gcnew System::Windows::Forms::RadioButton());
 this->radioButton2 = (gcnew System::Windows::Forms::RadioButton());
 
 this->SuspendLayout();
 //
 // radioButton1
 //
 this->radioButton1->AutoSize = true;
 this->radioButton1->Checked = true;
 this->radioButton1->Location = System::Drawing::Point(747, 95);
 this->radioButton1->Name = L"radioButton1";
 this->radioButton1->Size = System::Drawing::Size(85, 17);
 this->radioButton1->TabIndex = 0;
 this->radioButton1->TabStop = true;
 this->radioButton1->Text = L"radioButton1";
 this->radioButton1->UseVisualStyleBackColor = true;
 //
 // radioButton2
 //
 this->radioButton2->AutoSize = true;
 this->radioButton2->Location = System::Drawing::Point(747, 141);
 this->radioButton2->Name = L"radioButton2";
 this->radioButton2->Size = System::Drawing::Size(85, 17);
 this->radioButton2->TabIndex = 1;
 this->radioButton2->Text = L"radioButton2";
 this->radioButton2->UseVisualStyleBackColor = true;
 //
 // Form1
 //
 this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
 this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
 this->ClientSize = System::Drawing::Size(892, 466);
 this->Controls->Add(this->radioButton2);
 this->Controls->Add(this->radioButton1);
 this->Name = L"Form1";
 this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen;
 this->Text = L"Лабораторная работа №6 Работа с графом с помощью WindowsForms";
 this->MouseDown += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::Form1_MouseDown);
 this->ResumeLayout(false);
 this->PerformLayout();
 
 }
 #pragma endregion
 
 private: System::Void Form1_MouseDown(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
 Graphics ^g = this->CreateGraphics();
 Point P = e->Location;
 
 //нарисовать вершины
 if(this->radioButton1->Checked)
 {
 draw_top(n, points);
 }
 
 //  graphic.draw_top(ref n, point, P, g);
 
 }
 };
 }
 
 
но выдает следующую ошибку:
 1>------ Построение начато: проект: graph_in windowsform, Конфигурация: Debug Win32 ------
 1>Компиляция...
 1>graph_in windowsform.cpp
 1>d:\documents\etudes\6семестр\сппо\lab\lab6_graph\graph_in windowsform\Form1.h(7) : error C3145: points: глобальная или статическая переменная не может быть управляемого типа "cli::array<Type> ^"
 1> with
 1> [
 1> Type=System::Drawing::Point
 1> ]
 1> может не объявлять глобальную или статичную переменную или элемент собственного типа, который относится к объекту в куче сборщика мусора
 1>Журнал построения был сохранен в "file://d:\Documents\etudes\6семестр\сппо\lab\lab6_graph\graph_in windowsform\Debug\BuildLog.htm"
 1>graph_in windowsform - ошибок 1, предупреждений 0
 ========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
 [/code]
 Пробовал и вариант как c Point *points таким образом:
 
 Code #pragma once #include "Graphic.h"
 using namespace System::Drawing;
 
 #define nmax = 1000;
 Point *points;
 int n = 0;    //количество вершин
 
 namespace graph_inwindowsform {
 
 using namespace System;
 using namespace System::ComponentModel;
 using namespace System::Collections;
 using namespace System::Windows::Forms;
 using namespace System::Data;
 using namespace System::Drawing;
 
 
 
 
 /// <summary>
 /// Сводка для Form1
 ///
 /// Внимание! При изменении имени этого класса необходимо также изменить
 ///          свойство имени файла ресурсов ("Resource File Name") для средства компиляции управляемого ресурса,
 ///          связанного со всеми файлами с расширением .resx, от которых зависит данный класс. В противном случае,
 ///          конструкторы не смогут правильно работать с локализованными
 ///          ресурсами, сопоставленными данной форме.
 /// </summary>
 public ref class Form1 : public System::Windows::Forms::Form
 {
 public:
 Form1(void)
 {
 InitializeComponent();
 //
 //TODO: добавьте код конструктора
 //
 
 }
 
 protected:
 /// <summary>
 /// Освободить все используемые ресурсы.
 /// </summary>
 ~Form1()
 {
 if (components)
 {
 delete components;
 }
 }
 private: System::Windows::Forms::RadioButton^  radioButton1;
 protected:
 private: System::Windows::Forms::RadioButton^  radioButton2;
 
 private:
 /// <summary>
 /// Требуется переменная конструктора.
 /// </summary>
 System::ComponentModel::Container ^components;
 
 #pragma region Windows Form Designer generated code
 /// <summary>
 /// Обязательный метод для поддержки конструктора - не изменяйте
 /// содержимое данного метода при помощи редактора кода.
 /// </summary>
 void InitializeComponent(void)
 {
 this->radioButton1 = (gcnew System::Windows::Forms::RadioButton());
 this->radioButton2 = (gcnew System::Windows::Forms::RadioButton());
 
 this->SuspendLayout();
 //
 // radioButton1
 //
 this->radioButton1->AutoSize = true;
 this->radioButton1->Checked = true;
 this->radioButton1->Location = System::Drawing::Point(747, 95);
 this->radioButton1->Name = L"radioButton1";
 this->radioButton1->Size = System::Drawing::Size(85, 17);
 this->radioButton1->TabIndex = 0;
 this->radioButton1->TabStop = true;
 this->radioButton1->Text = L"radioButton1";
 this->radioButton1->UseVisualStyleBackColor = true;
 //
 // radioButton2
 //
 this->radioButton2->AutoSize = true;
 this->radioButton2->Location = System::Drawing::Point(747, 141);
 this->radioButton2->Name = L"radioButton2";
 this->radioButton2->Size = System::Drawing::Size(85, 17);
 this->radioButton2->TabIndex = 1;
 this->radioButton2->Text = L"radioButton2";
 this->radioButton2->UseVisualStyleBackColor = true;
 //
 // Form1
 //
 this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
 this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
 this->ClientSize = System::Drawing::Size(892, 466);
 this->Controls->Add(this->radioButton2);
 this->Controls->Add(this->radioButton1);
 this->Name = L"Form1";
 this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen;
 this->Text = L"Лабораторная работа №6 Работа с графом с помощью WindowsForms";
 this->MouseDown += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::Form1_MouseDown);
 this->ResumeLayout(false);
 this->PerformLayout();
 
 }
 #pragma endregion
 
 private: System::Void Form1_MouseDown(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
 Graphics ^g = this->CreateGraphics();
 Point P = e->Location;
 
 //нарисовать вершины
 if(this->radioButton1->Checked)
 {
 draw_top(n, points);
 }
 
 //  graphic.draw_top(ref n, point, P, g);
 
 }
 };
 }
 
 
Еще не создаю динамически,а уже ругается.Такая же ошибка.Нужно бы создать динамически,глобальный массив в Form1.h
 |  |  |  |  | 
| 
| Pesets | Дата: Пятница, 08 Апреля 2011, 15:03 | Сообщение # 2 |  |   постоянный участник Сейчас нет на сайте | Как со стеной разговариваю... http://tinyurl.com/6jg4oja
 Буквально в первых ссылках и описание проблемы и решение.
 
 
   
   
 
 Сообщение отредактировал Pesets - Пятница, 08 Апреля 2011, 15:03 |  |  |  |  |