Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
3 / 3 / 2
Регистрация: 09.03.2011
Сообщений: 247
1

Массив классов.

15.11.2011, 18:48. Показов 1715. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Столкнулся с проблемой. В отдельном заголовочном файле у меня находится класс (class1) с некими переменными. В главной форме мне необходимо глобально создать массив куда будет записываться этот класс (размерность массива - 1000) Тоесть в массиве может находится 1000 таких классов. При нажатии на баттон должна происходить запись этого класса в массив, если мы нажимаем на баттон снова, то опять же записывается этот класс в массив следующим по очереди. Буду очень благодарен за помощь!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.11.2011, 18:48
Ответы с готовыми решениями:

Массив ref классов: выход за пределы выделенной памяти
Имеется свой класс, который находится в отдельном файле.h ref class Bomb { public: Bomb(){...

Массив разных классов. Как добратся до всех полей этих классов?
Все классы имеют общего предка. Экземпляры этих классов запихнуты в один массив нужно както...

Массив классов
Здравствуйте. Помогите пожалуйста решить банальный вопрос. Есть 2 класса, как создать массив этих...

Массив классов
Нужно что-то на подобии string typeNames = new string { "Item", "EquippableItem" }; только нужно...

5
Эксперт .NET
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
15.11.2011, 19:46 2
Sinsei,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private:
    //Вот это - указатель на массив
    cli::array<class1*>^ MyArray;
    //Вот это - количество положенных в массив элементов
    int Count;
 
public:
    Form1(void)
        {
            InitializeComponent();
            //В конструкторе формы создаём массив и говорим, что в нём должно быть 1000 элементов
            this->MyArray = gcnew cli::array<class1*> (1000);
            this->Count = 0;
        }
 
private:
    System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
        Count++;  //Количество элементов увеличивается
        this->MyArray[Count] = new class1();  //Создаём экземпляр класса на позиции "Count" в массиве
    }
0
3 / 3 / 2
Регистрация: 09.03.2011
Сообщений: 247
15.11.2011, 20:20  [ТС] 3
Дело в том что мой класс лежит в другом файле (h). пространство имен там (My_program_source)

Делаю так:
C++
1
2
private:         
      cli::array<My_program_source::class1*>^ MyArray;
но при компиляции вот такой еррор:
error C3699: '*' : cannot use this indirection on type 'My_program_source::class1'

Добавлено через 15 минут
Так с этим разобрался. Теперь всего одна ошибка
C++
1
this->MyArray[Count] = new class1();
error C2061: syntax error : identifier 'class1'
0
Эксперт .NET
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
15.11.2011, 21:02 4
Sinsei, если у вас класс управляемый, то указатель нужно писать не так
C++
1
My_program_source::class1 *
а так:
C++
1
My_program_source::class1 ^
Цитата Сообщение от Sinsei Посмотреть сообщение
Так с этим разобрался. Теперь всего одна ошибка
C++
1
this->MyArray[Count] = new class1();
error C2061: syntax error : identifier 'class1'
Ну вы уж издеваетесь! Сами же написали, что у вас class1 находится в пространстве имён My_program_source. Так значит и пишите
C++
1
this->MyArray[Count] = gcnew My_program_source::class1();
Иначе компилятор не понимает!
1
3 / 3 / 2
Регистрация: 09.03.2011
Сообщений: 247
15.11.2011, 23:53  [ТС] 5
пробовал с пространством... а как переменным из класса присвоить значения? Суть в том что у нас массив одного и того же класса, только каждый раз в нем разные значения переменных. фух. запутался. попробую разобраться. спасибо.
0
Эксперт .NET
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
16.11.2011, 22:10 6
Sinsei, поизучайте ООП. Когда вы пишете...
C++
1
gcnew class1()
...то вызывается конструктор по умолчанию (который не принимает переменных) и создаётся объект.
Но вы можете создать ещё один конструктор. Например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class class1{
   int Parametr1;
   char Parametr2;
   double Parametr3;
 
   //Вот это конструктор по-умолчанию
   class1(){
      this->Parametr1 = 0;
      this->Parametr2 = 'A';
      this->Parametr3 = 1.0;
   }
 
   //Другой конструктор, который может сразу проинициализировать поля
   class1(int I, char J, double k){
      this->Parametr1 = I;
      this->Parametr2 = J;
      this->Parametr3 = K;
   }
}
Если вернуться к нашему примеру, то "переменным из класса присвоить значения" можно вызывая соответствующий конструктор
C++
1
this->MyArray[Count] = gcnew My_program_source::class1(int I, char J, double k);
или так
C++
1
2
3
4
this->MyArray[Count] = gcnew My_program_source::class1();
this->MyArray[0]->Parametr1 = I;
this->MyArray[0]->Parametr2 = J;
this->MyArray[0]->Parametr3 = K;
1
16.11.2011, 22:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2011, 22:10
Помогаю со студенческими работами здесь

Массив классов
Люди спасите как мне удалить нужные строки допустим определенно какогото человека вот программка я...

Массив классов
Помогите пожалуйста разобрать, как сделать массив класса и добавить 2 конструктора (пустой и...

Массив классов
Задача такая: Создать массив классов и заполнить переменные класса в массиве. public class...

Массив классов
Общая постановка задачи. Описать массив классов, представленных в задании. Обеспечить:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru