Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 463

Класс содержащий массив объектов другого класса

27.05.2016, 14:17. Показов 4778. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Нужно создать класс,содержащий массив объектов другого класса:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ref class Queue1
{
public:
    Queue1(void);
    array <Person^> ^queue;
        Queue1(const Queue1^);
    array <Person^>^ SetDat( array<String^>^ gc1, double x, double y, double z)
    {
        queue=gcnew array<Person ^>(3);
        queue[0]=gcnew Person();
        queue[0]->name=gc1[0];
    return queue;
    }
    
   
};
Класс Person
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ref class Person:Date
{
     
public:
    Person(void);
    
     String ^name;
     String ^surname;
         String ^birthday;
        String ^male_female;
          String ^activity;
            Person(const Person^);
 void Set_Data( String ^ ,  String ^,  String ^,  String ^,  String ^, double , double , double );
        
      
     int Check_Data();
  
     
           ~Person() { } 
    
};
Main
C++
1
2
3
Queue1 arr= gcnew Queue1(); 
                arr.SetDat(gc1,x,y,z);
             //  this->richTextBox1->AppendText((arr.queue[0].name).ToString());
Возникли такие проблемы:
1.Объявление и инициализация объектов типа Queue.В функции main выдает ошибки:
Queue1: необъявленный идентификатор
error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "arr"
error C2065: arr: необъявленный идентификатор
error C2061: синтаксическая ошибка: идентификатор "Queue1"
error C2065: arr: необъявленный идентификатор
error C2228: выражение слева от ".SetDat" должно представлять класс, структуру или объединение
,хотя в файле есть:
#include "Date.h"
#include "Person.h"
#include "Queue1.h"
2. Вывод объектов типа Queue1. Как правильно вывести в richTextBox1 значения объекта arr?
// this->richTextBox1->AppendText((arr.queue[0].name).ToString());[/B]
Очень нужна помощь.Спасибо!!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.05.2016, 14:17
Ответы с готовыми решениями:

Как занести в объект массив объектов дргуго класса
Толком не знаю чего хочу и нагуглить не получилось Задача у меня такая: Объект класса №1 это ( число, массив объектов класса №2) ...

Как создать статический двумерный массив объектов одного класса?
Есть определенное множество объектов типа tile^. Нужно их положить в двумерный массив с определенным размером, то есть статический, как это...

Класс содержащий объекты другого класса
Наткнулся на такую ситуацию. Как одно поле класса делают объект другого класса со своим конструктором. Типа class second { ...

10
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
28.05.2016, 22:40
Вероника99, общий вопрос. Почему класс Person не содержит массива функций указывающих на массивы Person?
Если Вы изучаете принцип то не проще ли начать с очень простых структур данных. Ведь разбираться с кучей лишнего хлама трудно и Вам и тому кто решит помочь.
По коду:
Посмотрите в одном ли пространстве имён размещены объявление Queue1 (в его заголовочном) и тело Main.
И что это за
C++
1
Queue1 arr= gcnew Queue1();
gcnew возвращает дескриптор а не значение поэтому: Queue1 ^arr

Совет: создайте с учебной целью новый проект, а в нём Person с одной строкой внутри. Поэкспериментируйте. Помните, Вы имеете дело с дескрипторами (специфическими указателями) и важно следить за их инициализацией.
0
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 463
29.05.2016, 15:24  [ТС]
Да,спасибо,уже разобралась,надо было писать
C++
1
2
Queue1 ^arr= gcnew Queue1();
arr->SetDat(gc1,x,y,z);
Еще подскажите пожалуйста,как в классе Queue1 можно было бы использовать итератор для работы с массивом объектов array <Person^> ^queue , по аналогу со следующим примером,только с синтаксисом cli и вместо vector <int> использовать array <Person^> ^queue;
C++
1
2
3
4
5
vector <int> C;
vector <int>::iterator p;
for ( p = C.begin( ) ; p != C.end( ) ; p++ )
cout << " " << *p;
cout << endl;
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
29.05.2016, 18:14
Вероника99, Вы можете идти как по массиву (индексно). Свойство Length - длина массива. А можете использовать интерфейс IEnumerable. То есть получаете энумератор (перечислитель) и потом например :
C++
1
while(myEn->MoveNext)
0
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 463
29.05.2016, 18:45  [ТС]
А как его объявить и инициализировать? В синтаксисе cli очень плохо разбираюсь
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
29.05.2016, 19:01
Цитата Сообщение от Вероника99 Посмотреть сообщение
А как его
https://msdn.microsoft.com/en-... 10%29.aspx
работайте с документацией Вероника99.
0
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 463
30.05.2016, 15:14  [ТС]
Как правильно сделать вывод элементов массива объектов queue?Написала следующее
C++
1
2
3
4
5
6
System::Collections::IEnumerator^ GetB()
    {
         System::Collections::IEnumerator^ myEnumerator = queue->GetEnumerator();
        return myEnumerator;
        
    }
C++
1
2
3
4
foreach (Person ^b in arr->GetB())
            {
                
            }
Выдает такие ошибки
error C2065: b: необъявленный идентификатор
error C2275: Person: недопустимое использование этого типа в качестве выражения
см. объявление "Person"
error C2146: синтаксическая ошибка: отсутствие ")" перед идентификатором "in"
error C2059: синтаксическая ошибка: )
error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
30.05.2016, 16:30
Цитата Сообщение от Вероника99 Посмотреть сообщение
foreach (Person ^b in arr->GetB())
У Вас хорошее воображение Вероника99. Вы умеете образно выразить свои намерения.
Теперь ещё раз взгляните по приведенной мной ссылке. Там в цикле while вызывается метод MoveNext. Он делает то же самое что и инкремент вызванный на итераторе. "Разыменование" перечислителя выполняет обращение к свойству current.
Однако есть ещё один момент. Ваш масссив это член Queue1 и даже если Вы решили использовать foreach то допустим:
C++
1
2
3
4
5
6
7
8
9
//once uppon a code:
Queue1 q=gcnew Queue1();
 
//bla-bla-bla
 
foreach (Person ^b in q->queue)//на экземпляре нужно
{
b->name="Eduard";//все имена в этой программе вымышлены случайным образом
}
0
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 463
30.05.2016, 23:20  [ТС]
Мой мозг уже вообще ничего не соображает,знаю,что наглая просьба,никогда такого не прошу,но могли бы Вы написать пример использования итератора (и его вызова) в любом виде в любом методе класса Queue1 в моей программе,лишь бы был итератор, а то сдавать уже послезавтра, а времени разобраться почти нет(((Была бы очень благодарна
вот что сейчас есть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
ref class Queue1
{
public:
    Queue1(void);
    array <Person^> ^queue;
        Queue1(const Queue1^);
    array <Person^>^ SetDat( array<String^>^ gc1, double x, double y, double z,array<String^>^ gc2,double dat2[],array<String^>^ gc3,double dat3[])
    {
        queue=gcnew array<Person ^>(3);
        queue[0]=gcnew Person();
    
        queue[0]->name=gc1[0];
        queue[0]->surname=gc1[1];
        queue[0]->birthday=gc1[2];
        queue[0]->male_female=gc1[3];
        queue[0]->activity=gc1[4];
        queue[0]->day=x;
        queue[0]->month =y;
        queue[0]->year =z;
 
        queue[1]=gcnew Person();
    
        queue[1]->name=gc2[0];
        queue[1]->surname=gc2[1];
        queue[1]->birthday=gc2[2];
        queue[1]->male_female=gc2[3];
        queue[1]->activity=gc2[4];
        queue[1]->day=dat2[0];
        queue[1]->month =dat2[1];
        queue[1]->year =dat2[2];
        
        queue[2]=gcnew Person();
    
        queue[2]->name=gc3[0];
        queue[2]->surname=gc3[1];
        queue[2]->birthday=gc3[2];
        queue[2]->male_female=gc3[3];
        queue[2]->activity=gc3[4];
        queue[2]->day=dat3[0];
        queue[2]->month =dat3[1];
        queue[2]->year =dat3[2];
        return queue;
    }
 
     void Sort()
    {
        
        //array<String>::iterator p; 
        /*Person ^tmp=gcnew Person();
        for (int i = 0; i < 3 - 1; i++)
            for (int j = 0; j < 3 - i - 1; j++)
            {
                if (queue[j]->year < queue[j + 1]->year)
                {
                    tmp = queue[j];
                    queue[j] = queue[j + 1];
                    queue[j + 1] = tmp;
 
                }
                else if ((queue[j]->year == queue[j + 1]->year) && (queue[j]->month < queue[j + 1]->month))
                {
                    tmp = queue[j];
                    queue[j] = queue[j + 1];
                    queue[j + 1] = tmp;
                }
                else if (((queue[j]->year == queue[j + 1]->year) && (queue[j]->month == queue[j + 1]->month)) && (queue[j]->day < queue[j + 1]->day))
                {
                    tmp = queue[j];
                    queue[j] = queue[j + 1];
                    queue[j + 1] = tmp;
                }
                
 
 
            }*/
    }
     System::Collections::IEnumerator^ GetB()
    {
         System::Collections::IEnumerator^ myEnumerator = queue->GetEnumerator();
        return myEnumerator;
        
    }
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
31.05.2016, 02:07
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Цитата Сообщение от Вероника99 Посмотреть сообщение
знаю,что наглая просьба,никогда такого не прошу
что-то подкупает в правдивости этой фразы. Вероника99, что делал Ваш мозг в течении дня? Почему писать несложное но относительно громоздкое задание приходится ночью. У меня 2 часа.
Я уж не говорю о том что пример по ссылке есть. Я упростил и кое-что добавил. Дальше попробуйте сами. Что не получится спрашивайте. И да. Жутко хочется понять о какой активности идёт речь.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
// QueueVeronicaBelissima.cpp: главный файл проекта.
 
#include "stdafx.h"
 
using namespace System;
using namespace System::Collections;
ref class Person
{
     
public:
    Person(){};
    
     String ^name;
     String ^surname;
     String ^birthday;
     String ^sex;
     String ^activity;
            //Person(const Person^);
Person(String ^name_, String ^surname_, String ^birthday_, String ^sex_, String ^activity_)
:name(name_), surname(surname_), birthday(birthday_), sex(sex_), activity(activity_) 
{}
void Show()
{
Console::WriteLine("\n"+name+" "+surname+" "+birthday+" "+sex+" "+activity);
 
}
 
void ConsoleInput()
{
Console::WriteLine(L"Введите имя");
name=Console::ReadLine();
Console::WriteLine(L"Введите фамилию");
surname=Console::ReadLine();
Console::WriteLine(L"Введите месяц рождения");
birthday=Console::ReadLine();
Console::WriteLine(L"Введите пол");
sex=Console::ReadLine();
Console::WriteLine(L"Введите что-нибудь отражающее активность ");
activity=Console::ReadLine();
}
 //void Set_Data( String ^ ,  String ^,  String ^,  String ^,  String ^, double , double , double );
        
      
     //int Check_Data();
  
     
          // ~Person() { } 
 
    
};
 
ref class Queue1
{
public:   
array <Person^> ^queue;
int ind;
 Queue1(int n)
{
ind=0;
if(n>0)
queue=gcnew array <Person^>(n);
else throw(gcnew Exception("negative size of array at ctor Queue1"));
}
void Add(Person ^p)
{
queue[ind++]=p;
}   
};
 
int main(array<System::String ^> ^args)
{
 
int num_pers;
String ^inp_str;
Console::WriteLine(L"Введите количество персон");
inp_str=Console::ReadLine();
num_pers=Convert::ToInt32(inp_str);
 
Queue1 ^q=gcnew Queue1(num_pers);
 
IEnumerator^ myEnumerator = q->queue->GetEnumerator();
Person ^tmp_person;
while(myEnumerator->MoveNext())
{
tmp_person=gcnew Person();
tmp_person->ConsoleInput();
q->Add(tmp_person);
}
myEnumerator->Reset();
while(myEnumerator->MoveNext())safe_cast<Person^>(myEnumerator->Current)->Show();
 
  char c =  Console::Read();
    return 0;
}
2
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 463
31.05.2016, 13:34  [ТС]
Мозг писал дипломную Большое спасибо,очень помогло)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.05.2016, 13:34
Помогаю со студенческими работами здесь

Класс с листом объектов другого класса
Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;...

Массив объектов одного класса как поле другого класса
Доброе время суток. Мне тут в универе задали лабу, нужно создать класс полем которого будет массив объектов класса из предыдущей лабы и в...

Поле класса содержит массив объектов другого класса
Добрый день. Есть класс Queue,который как поле содержит массив объектов на класс Pers. public class Queue { private...

Массив объектов класса как член другого класса
Здравствуйте. У меня тут возникла проблемка #include &quot;main.h&quot; class player { public: player(); player(char*); ...

Поле класса - массив объектов другого класса
Здравствуйте. У меня определен класс Article, в котором определен конструктор по умолчанию. Затем определяю класс Magazine, в котором...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника Номенклатура по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника Сотрудники по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru