Четверг, 28 Марта 2024, 11:52

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » C/C++ » Как объявить инициализировать глобальный массив Point в clr?
Как объявить инициализировать глобальный массив Point в clr?
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
Форум игроделов » Программирование » C/C++ » Как объявить инициализировать глобальный массив Point в clr?
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг