5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 463

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

27.05.2016, 14:17. Показов 4786. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru