2 / 2 / 0
Регистрация: 10.03.2016
Сообщений: 64
1

Как создать STL stack объектов пользовательского класса?

13.11.2016, 12:14. Показов 1903. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Скажите пожалуйста, как создать STL stack объектов пользовательского класса в WinForm C++. У меня постоянно ругается на память "* это косвенное обращение невозмоно использовать для типа", а так же пишет, что "член класса управляемый не может относиться к типу класса не управляемый".
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
public ref class CourseForm : public System::Windows::Forms::Form
    {
    public:
        CourseForm(void)
        {
                       //Выделяю память под новый стек в конструкторе
                       re = new stack<Enemy>;
            InitializeComponent();
            //
            //TODO: добавьте код конструктора
            //
        }
 
    protected:
        /// <summary>
        /// Освободить все используемые ресурсы.
        /// </summary>
        ~CourseForm()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::Panel^  panel1;
    protected:
    private: System::Windows::Forms::Button^  button1;
    private: System::Windows::Forms::Timer^  timer1;
    private: System::Windows::Forms::Button^  button2;
    private: System::Windows::Forms::PictureBox^  pictureBox1;
 
 
    private: System::ComponentModel::IContainer^  components;
 
    protected:
 
    private:
        /// <summary>
        /// Требуется переменная конструктора.
        /// </summary>
    public:
        //Вот тут я создаю stack!!!
        stack<Enemy> re;
А вот мой класс, объекты которого я хочу положить в stack
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
#pragma once
 
public  ref class Enemy
{
public:
    int xpos;
    int ypos;
    Enemy()
    {
        this->xpos = 0;
        this->ypos = 0;
    }
    Enemy(int xpos, int ypos)
    {
        this->xpos = xpos;
        this->ypos = ypos;
    }
 
    //Конструктор копирования
    Enemy(const Enemy %e)
    {
        this->xpos = e.xpos;
        this->ypos = e.ypos;
    }
};
Помогите пожалуйста!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.11.2016, 12:14
Ответы с готовыми решениями:

Как сделать stl::stack полем класса
Здравствуйте! Столкнулся с такой проблемой - как сделать полем класса какой либо из STL контейнеров...

Как использовать stl для своего класса(для пользовательского типа данных)
Мне бы пример какой-нибудь а то в инете ищу ничего не могу найти, кроме базовых типов данных

Как в векторе объектов пользовательского класса изменить заданное поле у определённого элемента?
Добрый день. Создан вектор из структры: struct man { char name; int age; ...

STL создать priority_queu от пользовательского типа
Как создать priority_queu для пользовательского типа? У меня есть какойто масив пользовательского...

8
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,621
13.11.2016, 12:35 2
Если ты используешь .NET, то там свои контейнеры.
0
2 / 2 / 0
Регистрация: 10.03.2016
Сообщений: 64
13.11.2016, 12:46  [ТС] 3
Т.е. мне вообще нельзя использовать STL для WinForm?
Дело в том, что мне по заданию нужно STL использовать для проекта.
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,621
13.11.2016, 14:12 4
Тогда делай обычный неуправляемый класс.
1
2 / 2 / 0
Регистрация: 10.03.2016
Сообщений: 64
15.11.2016, 13:30  [ТС] 5
Разобрался с проблемой, чтобы в STL класть объекты класса, нужно чтобы класс не был ref (ссылочный), тогда все работает.
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
public class Coords
{
public:
    int xpos;
    int ypos;
    Coords(void)
    {
        this->xpos = 0;
        this->ypos = 0;
    }
    Coords(int xpos, int ypos)
    {
        this->xpos = xpos;
        this->ypos = ypos;
    }
 
    //Конструктор копирования
    Coords(const Coords %e)
    {
        this->xpos = e.xpos;
        this->ypos = e.ypos;
    }
};
 
public:
std::vector<Coords> *EnemyCoord;
EnemyCoord = new vector<Coords>();
EnemyCopy = new Coords(x, y);
EnemyCoord->push_back(*EnemyCopy);
0
Эксперт .NET
12061 / 8369 / 1280
Регистрация: 21.01.2016
Сообщений: 31,559
15.11.2016, 15:02 6
v1a_sacra, нельзя помещать в контейнеры из STL управляемые классы. Для этого предусмотрены свои, дотнетовские контейнеры (в данном случае List<T> - аналог std::vector<T>).
0
2 / 2 / 0
Регистрация: 10.03.2016
Сообщений: 64
15.11.2016, 16:57  [ТС] 7
А почему тогда у меня работает STL вектор с объектами моего класса?
0
Эксперт .NET
12061 / 8369 / 1280
Регистрация: 21.01.2016
Сообщений: 31,559
16.11.2016, 08:01 8
v1a_sacra, потому, что объекты твоего класса - неуправляемый код.
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,237
16.11.2016, 11:52 9
v1a_sacra, можете использовать для ссылочных типов STL-CLR из пространства имен cliext. Подробнее на MSDN.
0
16.11.2016, 11:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2016, 11:52
Помогаю со студенческими работами здесь

C++ STL Создать контейнер (Stack)
1. Создать объект-контейнер и заполнить его данными, тип stack 2. Просмотреть контейнер. 3....

Как создать динамически расширяемый массив объектов пользовательского типа (структура User)?
Здравствуйте, нужна ваша помощь с структурой ... Bот у меня пользователей при регистрации может...

Вектор объектов пользовательского класса
Привет всем! Есть класс Automaton, я пытаюсь создать вектор Sample с объектами этого класса, а они...

Как создать элемент вектора пользовательского типа(класса)?
Делаю змейку в консоли, а по сути тренируюсь с классами и векторами. Есть класс с конструктором...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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