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

Описание класса

30.01.2011, 17:46. Показов 5197. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите советом, пожалуйста.
Описываю класс в отдельном заголовочном файле
Code
1
2
3
4
5
6
7
8
9
10
11
12
using namespace System;
public ref class Akcii{
    public:
        Akcii(void){};
        ~Akcii(void){};
        void input(void){};
    //private:
        String^ name;
        String^ versh;
        String^ outsign;
        int ves;
    };
Затем пытаюсь создать массив объектов класса в другом заголовочном файле
Code
1
Akcii massive[1000];
Не получается и вылазиет ошибка
error C2728: 'Akcii' : a native array cannot contain this managed type

Задача вобще в том, чтобы записать большое количество некоторых элементов и потом к ним обращаться, как организовать получше?
Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.01.2011, 17:46
Ответы с готовыми решениями:

Описание класса
Можно ли сделать альтернативное описание класса без (_user)?Оставив только user. class InterfaceForm : Form { ...

Как вынести описание методов вложенного класса за пределы класса?
Подскажите, пожалуйста, как мне вынести описание методов вложенного класса за пределы класса?

Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов
Возникли сложности при решении задачи. Буду признателен тем, кто поможет. Задание: Составить описание класса. Объявить объекты класса...

18
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
30.01.2011, 18:09
zhsch, используйте не статический массив, а как минимум динамический, или еще лучше List или ArrayList
1
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 31
30.01.2011, 18:51  [ТС]
Поясните, пожалуйста, что представляют из себя List и ArrayList (не работал с ними еще).
Вы предлагаете использовать их вместе массива или вместо самого класса?
Приведите пример, если не трудно...
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
30.01.2011, 19:04
zhsch, вместо массива. Перейдите по ссылкам, которые я сбросил, там есть примеры
0
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 31
04.02.2011, 17:58  [ТС]
Простите, все равно не понял..
При использовании ArrayList мы имеем структуру, в ячейках которой располагаем данные любого типа.
Code
1
2
3
Akcii^ a = gcnew Akcii;
                 ArrayList^ AL = gcnew ArrayList;
                 AL->Add(a);
Т.е. вы предлагаете размещать в этих ячейках указатели на объекты класса Akcii ?
Честно, не понял идеи..
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
04.02.2011, 18:01
zhsch, да, я предлагаю в этом списке хранить указатели на объекты типа Akcii
1
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 31
04.02.2011, 18:13  [ТС]
Хорошо, т.е. при необходимости записать новый объект в ArrayList мы записываем данные в поля объекта класса, затем записываем сам объект в ArrayList?
Но как тогда выполнять оттуда выборку? Если, к примеру, мне нужно выбрать элемент, у котогоро в поле "name" записано "A1".
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
04.02.2011, 19:10
Вот вам небольшой пример:
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
using namespace System;
using namespace System::Collections;
 
ref class Test{
private:
    int n;
    String^ s;
public:
    Test(int n, String^ s)
    {
        this->n = n;
        this->s = s;
    }
    String^ getS()
    {
        return s;
    }
    int getN()
    {
        return n;
    }
    void print()
    {
        Console::WriteLine("n = {0}\ns = \"{1}\"\n", n, s);
    }
};
 
int main(array<System::String ^> ^args)
{
    ArrayList^ list = gcnew ArrayList();
    list->Add(gcnew Test(6, "Six"));
    list->Add(gcnew Test(1, "One"));
    list->Add(gcnew Test(2, "Two"));
    list->Add(gcnew Test(3, "Three"));
    list->Add(gcnew Test(4, "Four"));
    
    int size = list->Count;
    for(int i = 0; i < size; ++i)
        if(((Test^)list[i])->getS()->Equals("Two"))
            ((Test^)list[i])->print();
    Console::ReadLine();
    return 0;
}
1
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 31
04.02.2011, 20:50  [ТС]
За пример большое спасибо, так гораздо яснее.
К сожалению, вопросы есть еще)
Итак, с добавление разобрался, только напрямую писать в ArrayList он не захотел, поэтому сперва пришлость записать все в объект класса, а затем его уже записывать в массив:
Code
1
2
3
4
Akcii^ a = gcnew Akcii;
ArrayList^ AL = gcnew ArrayList;
a->Test(Akc, Versh, Sign, vessa);
AL->Add(a);
При попытке писать
Code
1
AL->Add(gcnew Test(Akc, Versh, Sign, vessa));
выдает сообщение, что не видит переменной Test. Стоит сказать, что описание класса находится в другом файле. (Метод Test в области public).
И еще, не видел раньше такой конструкции:
Code
1
((Test^)list[i])
поясните, пожалуста, т.к. в этом месте он так же пишет:
Error 3 error C2065: 'Test' : undeclared identifier
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
04.02.2011, 21:06
zhsch, Test - это из моего примера класс, у вас он, соответственно, называется Akcii.
Вы должны добавлять объекты в список вот так:
C++
1
2
ArrayList^ AL = gcnew ArrayList;
AL->Add(gcnew Akcii());
Естественно вы можете вызывать любой описанный вами конструктор, поскольку в первом посте вы описали прототип конструктора без параметров, то я его и вызываю.

Цитата Сообщение от zhsch Посмотреть сообщение
C++
1
((Test^)list[i])
Это явное приведения элемента списка к типу Test^, поскольку каждый элемент списка имеет тип System::Object
1
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 31
08.02.2011, 22:20  [ТС]
Спасибо еще раз, все работает и очень удобно)
С этим проблем больше, вроде, не возникает, но теперь программа упрямится на строке номер 3 (где for), указывая на Akcia->Length
Code
1
2
3
4
5
6
7
String^ Akcia = (((Akcii^)AL[i])->getPer());
                         if (Akcia != "") {
                             for(o=0; o < Akcia->Length; o++)
                                {
                                    superbufer[o] = Akcia[o];
                                };
                         };
Ошибку не находит, но уже в процессе работы программы перескакивает на код в VS и пишет:
System.NullReferenceException was unhandled
Message="В экземпляре объекта не задана ссылка на объект."
Строка может быть нулевой. Не знаю, что не так, раньше такую же конструкцию использовал в других программах - все замечательно работало.
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
08.02.2011, 23:57
zhsch, у вас строка не проинициализирована и там ничего нет, но она не String::Empty, а null
И у вас ошибка в коде - вы сравниваете не содержимое строки, а указатели на строки, и к тому же вам не мешало бы проверять еще и на пустое значение, т.е. вторую строку заменить на эту:
C++
1
if(Akcia != null && !String::Empty->Equals(Akcia))
1
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 31
11.02.2011, 18:52  [ТС]
Code
1
String^ Akcia = (((Akcii^)AL[i])->getPer());
А разве это не инициализация?
Конкретно, как нужно решать эту проблему?

(Условие заменил, спасибо за совет)
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
11.02.2011, 19:55
zhsch, а это гарантирует, что следующее условие:
C++
1
((Akcii^)AL[i])->getPer() != null
всегда выполняется?
1
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 31
11.02.2011, 22:26  [ТС]
Неа, строка запросто может быть равна нулю... Именно тогда вышеописанное окошко и вылетает..(
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
11.02.2011, 22:59
Цитата Сообщение от zhsch Посмотреть сообщение
Неа, строка запросто может быть равна нулю
Вот именно поэтому я вам и сказал сделать такую проверку:
Цитата Сообщение от M128K145 Посмотреть сообщение
C++
1
if(Akcia != null && !String::Empty->Equals(Akcia))
1
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 31
11.02.2011, 23:09  [ТС]
Ну, в таком случае он не распознает null, пишет, что такая переменная не описана...
Если имеете ввиду NULL, то работать все равно отказывается, т.к. не может сравнивать String^ переменную с int значением(
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
11.02.2011, 23:29
Да, прошу прощения, в CLR null - это nullptr, проверка должна выглядеть так:
C++
1
if(Akcia != nullptr && !String::Empty->Equals(Akcia))
1
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 31
12.02.2011, 01:06  [ТС]
Порядок, теперь все хорошо) Благодарствую)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.02.2011, 01:06
Помогаю со студенческими работами здесь

описание класса
Пытаюсь описать класс #include &quot;bass.h&quot; struct CSoundData { void *Data; QWORD Size; QWORD Seek; }...

Описание класса
Я уже так устал с этим возиться. Засуньте сюда еще пересечение двух прямоугольников, пожалуйста import math RecYes = 0 class...

Описание класса
Описать класс «файл», содержащий сведения об имени, дате создания и длине файла. Предусмотреть инициализацию с проверкой допустимости...

Описание класса
Помогите, пожалуйста, советом - как грамотно изображение привязать к классу? Не могу разобраться с правильной записью: &lt;img...

Описание класса
Доброго времени суток. На рисунку ниже есть UML диаграмма классов(составлял сам). Как мне опсать словестно эти класы(что делает этот класс...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru