Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 23.02.2016
Сообщений: 12
1

Взаимодействие между классами в C++

02.03.2016, 23:02. Показов 854. Ответов 7

Здравствуйте.
Помогите пожалуйста решить вопрос.
У меня есть два класса Alog и Post.
Класс Alog автоматически созданный класс при добавлении новой формы в приложение взаимодействует на форме с listBox1. На форме 2 кнопки, "выход" и "отправить". Этот класс должен служить для логирования событий класса Post
Класс Post это в ручную описанный класс как (public ref class Post) который отправляет переданные ему файлы в сокет. У него есть один public метод Send в который передаются два параметра один из них array<FileInfo^> и unsigned int Total. Класс Post умеет только отправлять данные в сокет и не умеет работать с формами.

Я хочу реализовать следующий функционал:
При нажатии на кнопку "отправить" на форме Alog, создавался объект класса Post и выполнялся метод Send.
Все действия метода Send должны логироваться в форме Alog, а именно добавляться текстовые сообщения в listBox1.

В классе Alog создал глобальные переменные String^ message и публичные методы Set, Get для работы с этой переменной. Так же создал публичный метод AddEvent который позволяет добавить сообщение message в listBox1.
В классе Post создал объект класса Alog и используя его методы Set и AddEvent пытаюсь выполнить добавление сообщения в listBox.

Вот тут и возникает проблема. Вот мой код:
методы класса Alog
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
//Глобальная переменная 
    private:
        String^ message;
 
    public: void AddEvent()
    {
        if (getMessage() == nullptr)
        {
            listBox1->Items->Add("Empty");
        }
        else
        {
            listBox1->Items->Add(getMessage());
        }
        
    }
 
    public: void setMessage(String^ sms)
    {
        message = sms;
    }
 
    public: String^ getMessage()
    {
        return message;
    }
 
//Нажатие на кнопку отправить
    private: System::Void bt_send_Click(System::Object^  sender, System::EventArgs^  e) {
        Post postMan;
        this->setMessage("Sending");
                this->AddEvent();
        postMan.Send(this->getArray(), this->getTotal());
    }
Класс Post метод Send:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int Post::Send(array<FileInfo ^> ^ fia, unsigned short total)
{
    TestForm::alog^ log_form;
    setHello(total);
    log_form->setMessage("Structure HELLO was set");
        log_form->AddEvent();
 
    if (SocketInit(NULL, 8080))
    {
        SendHello();
 
        for (int i = 0; i < total; i++)
        {
                    ///Код отправки
                 }
 
          }
}
При компиляции ошибок не возникает, но при нажатии кнопки "отправть"
вылетает вот такая ошибка
Необработанное исключение типа "System.NullReferenceException"
Показание отладчика на картинке во вложении

Подскажите пожалуйста, как правильно реализовать взаимодействие Post и Alog классов таким образом, чтобы метод Send класса Post успешно логировал свои события через класс Alog в listBox1 на форме?

Спасибо.
Миниатюры
Взаимодействие между классами в C++  
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.03.2016, 23:02
Ответы с готовыми решениями:

Как получить доступ между классами в Windows Forms?
Здравствуйте. Подскажите есть ли возможность получить доступ между классами в Windows Forms на C++?...

Взаимодействие между классами
Суть проблемы такова: в одном файле classy.h объявлено несколько классов (classcontrol, class1,...

Взаимодействие между классами
В джава свинге у меня объявлено два фрейма(два окна). На одном из них есть боттон, при нажатии на...

Взаимодействие между классами
При попытке создать указатель на объект класса в public секции другого класса из которого будет...

7
100 / 38 / 20
Регистрация: 27.02.2016
Сообщений: 135
02.03.2016, 23:28 2
log_form у вас нигде не создается же.
0
0 / 0 / 0
Регистрация: 23.02.2016
Сообщений: 12
02.03.2016, 23:29  [ТС] 3
Форма log_form является дополнительной, она появляется по событию из первой формы.
0
100 / 38 / 20
Регистрация: 27.02.2016
Сообщений: 135
02.03.2016, 23:31 4
Цитата Сообщение от Alexander_I Посмотреть сообщение
TestForm::alog^ log_form;
Я вот про это место. Локальная переменная создается, но значение не присваивается, потом используется как указатель на класс. Разве в managed-c++ это нормально?
0
0 / 0 / 0
Регистрация: 23.02.2016
Сообщений: 12
02.03.2016, 23:34  [ТС] 5
Как тогда верно реализовать обращение к log_form?
0
100 / 38 / 20
Регистрация: 27.02.2016
Сообщений: 135
02.03.2016, 23:38 6
Цитата Сообщение от Alexander_I Посмотреть сообщение
Как тогда верно реализовать обращение к log_form?
Присвоить log_form какое-то значение.

C++
1
TestForm::alog^ log_form = new TestForm::alog();
0
0 / 0 / 0
Регистрация: 23.02.2016
Сообщений: 12
03.03.2016, 00:05  [ТС] 7
Сделал так.
Ошибка перестала выскакивать, но и действия метода setMessage и AddEvent из метода Send класса Post не отображается в listBox1. Никаких ошибок не выдает.
C++
1
2
log_form->setMessage("Structure HELLO was set");
log_form->AddEvent();
Добавлено через 16 минут
Судя по отладчику, все методы выполняются, но на форме ничего не отображается.
0
0 / 0 / 2
Регистрация: 21.05.2013
Сообщений: 26
13.03.2016, 00:50 8
Столкнулся с той же самой проблемой, подскажите что делать.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2016, 00:50

Взаимодействие между классами
Помогите люди добрые тут такая ситуация нужно реализовать взаимодействие между классами нужно чтобы...

Взаимодействие между классами
Начал изучать Qt и попутно осваивать ООП. Пока проблем больше со вторым... В учебных целях пишу...

Взаимодействие между классами. Как реализовать?
Здравствуйте. Пытаюсь написать симулятор солнечной системы (или любой другой вещи где работает...

Jsoup парсинг взаимодействие между классами - подскажите разобраться
Есть класс который парсит xml файл public class Myversion { public static void...


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

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

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