Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
1 / 1 / 1
Регистрация: 20.03.2013
Сообщений: 77

Самоудаляются поля статического объекта класса

06.12.2013, 02:39. Показов 1897. Ответов 23
Метки нет (Все метки)

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

Есть две формы, Form1 и Form2.
И там и там подключен заголовочный файл следующего содержимого:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef MY_HEADER_FILE
#define MY_HEADER_FILE
 
#include <string>
#include <msclr\marshal_cppstd.h>
 
namespace Unamespace
{
    using std::string;
    
     struct Strings
    {
        string mylink;
        string name;
        string comment;
 
    };
    static Strings datagram;
}
 
#endif
И Form1 и Form2 совершенно спокойно могут работать с полями этой структуры: записывать и выцеплять оттуда данные: Unamespace::datagram.name = "что-нибудь".

Однако если в Form1 что-нибудь написать в одно из полей, затем вызывать Form2 и уже там попытаться исполнить что-то вроде
C++
1
/*какая-нибудь переменная Form2*/ = Unamespace::datagram.name
То мы обнаружим, что ВСЕ поля СТАТИЧЕСКОГО объекта класса каким-то образом успели опустеть. Каким образом и как это исправить?

P.S. Скорее всего, я что-то сильно делаю не так, сильно не пинайте.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.12.2013, 02:39
Ответы с готовыми решениями:

Инициализация в классе статического объекта класса :)
Добрый день! Огромное спасибо за ваше внимание! Помогите разобраться с такой проблемой. Есть чисто статический класс (не нужен его объект...

Инициализация константного статического объекта - члена класса
Здравствуйте, у меня возникла проблема с инициализацией статического объекта, который является членом класса. Этот объект должен быть...

Инициализация статического объекта типа Х внутри класса Х
Приветствую! Прошу прощения, если вопрос не нов и давно разъяснен, возможно, искал не по тем словам, но не нашел именно то, что мне...

23
1 / 1 / 1
Регистрация: 20.03.2013
Сообщений: 77
06.12.2013, 19:35  [ТС]
Перепост. Простая же совсем задача, неужели никто не может помочь?
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
06.12.2013, 20:49
Цитата Сообщение от landgen Посмотреть сообщение
Простая же совсем задача, неужели никто не может помочь?
Какая- же она простая, адская смесь .NET-а и неизвестно чего.
И создавать вторую форму редко бывает нужно. Лучше вкладки дополнительные создавать
(например TabControl-ом).
0
1 / 1 / 1
Регистрация: 20.03.2013
Сообщений: 77
07.12.2013, 00:35  [ТС]
Цитата Сообщение от MrCold Посмотреть сообщение
Какая- же она простая, адская смесь .NET-а и неизвестно чего.
И создавать вторую форму редко бывает нужно. Лучше вкладки дополнительные создавать
(например TabControl-ом).
Но мне же нужно всплывающее диалоговое окно создать, это же вроде формами делается, разве нет?
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
07.12.2013, 00:38
landgen, пожайлуста всю задачу опишите . А то и не знаю что отвечать.

Не по теме:

Пожет что придумаю, только не сейчас

0
1 / 1 / 1
Регистрация: 20.03.2013
Сообщений: 77
07.12.2013, 03:10  [ТС]
MrCold, нужно открыть окно с полями для пользователя, пользователь вводит данные в поля и нажимает ОК, окно закрывается, а первое окно должно иметь доступ к этим данным и должно быть способным их прочитать.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
07.12.2013, 12:26
На Form1 кнопка "Вввод данных" и 3 компонента Label
На Form2 кнопка "ОК" и 3 компонента textBox для ввода данных
подключен заголовочный файл
TData.h
C++
1
2
3
4
5
6
7
8
9
10
11
#ifndef TDATA_H
#define TDATA_H
 
public ref class TData
     {
     public :
         System::String^ mylink;
         System::String^ name;
         System::String^ comment;    
     };
#endif
Form1.h
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
 
#include "TData.h"
 #include "Form2.h"
 
...............................
...................................
    public:
        Form1(void)
        {
            InitializeComponent();
            data = gcnew TData();
            form2 = gcnew Form2(data);
        
        }
 
    private: TData^ data;
     private: Form2^ form2;
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
                 {
                    form2->ShowDialog();
                    label1->Text = data->mylink;
                    label2->Text = data->name;
                    label3->Text = data->comment ;
                 }
Form2.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#pragma once
#include "TData.h"
...........................
...............................
    public:
        Form2(TData^ inData)
        {
            InitializeComponent();
            data = inData;
        }
 
    
    private: TData^ data;
 
 
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
                 {
                     data->mylink = textBox1->Text;
                     data->name = textBox2->Text;
                     data->comment = textBox3->Text;
                     this->Close();
                 }
Миниатюры
Самоудаляются поля статического объекта класса  
Изображения
 
0
1 / 1 / 1
Регистрация: 20.03.2013
Сообщений: 77
07.12.2013, 16:04  [ТС]
public ref class TData
Ах вот, как оно делается. Я просто примерно тоже самое пытался исполнить, только не смог в виду отсутствия знаний. Я вообще в гуй старался не соваться, ибо уж слишком сложно там все мне кажется.

Спасибо. Только мне не лейблы были нужны, но я смогу под себя это дело адаптировать

Добавлено через 2 минуты
И да, объясните, пожалуйста, что это такое вы сочинили в пабликах обеих форм. Похоже на конструкторы, что ли. Как это работает?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
07.12.2013, 16:57
Цитата Сообщение от landgen Посмотреть сообщение
MrCold, нужно открыть окно с полями для пользователя, пользователь вводит данные в поля и нажимает ОК, окно закрывается, а первое окно должно иметь доступ к этим данным и должно быть способным их прочитать.
а причем здесь статические поля?
вот пример из MFC(я думаю что в CLI не большая разница)
C++
1
2
3
4
5
6
CMyDlg dlg: //создали диалог
if(dlg.DoModal()==IDOK)// проверили что диалог вернул нажатие на кнопу  "OK"
{
 a=dlg.a;// сохраним значение a из диалога в наше значение a
 b=dlg.b;// сохраним значение  b из диалога в наше значение  b
}
тебе нужно понять главное
время жизни переменной
и время жизни диалога
если закрылся диалог не значит что переменная его обеспечивающая закрылась
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
07.12.2013, 19:33
Цитата Сообщение от landgen Посмотреть сообщение
И да, объясните, пожалуйста, что это такое вы сочинили в пабликах обеих форм. Похоже на конструкторы, что ли. Как это работает?
Да это конструкторы. Мы передаем ссылку на TData из класса Form1 в конструктор класса Form2.
Если С++ учили то вот, упрощенный вариант на С++.
В комментах все написал.
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
#include <string>
#include <iostream>
 
struct Data
{
    std::string mylink;
    std::string name;
};
 
class Form2
{
  public:
     Form2( Data & inData)
         : data(inData)
    {}
    void button_click()
    {
        data.mylink = "Link";
        data.name = "Andrey";
    }
private:
    Data & data;
};
 
 
 
int main()
{
    Data data;
    data.mylink = "Empty";
    data.name   = "Empty";
 
    // ПЕРЕДАЕМ СТРУКТУРУ Data В Form2 ПО ССЫЛКЕ 
    Form2 form2(data);
    // ПЕЧАТАЕМ ПОЛЯ Data
    std::cout << "Before : " << data.mylink << ' ' << data.name << std::endl;
    // НАЖИМАЕМ КНОПКУ В Form2 ПРИСВАИВАЕМ ПОЛЯМ Data НОВЫЕ ЗНАЧЕНИЯ 
    form2.button_click();
    // ПЕЧАТАЕМ ПОЛЯ ИЗМЕНИЛИСЬ
    std::cout << "After  : " <<data.mylink << ' ' << data.name << std::endl;
 
    system("pause");
}
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
07.12.2013, 19:42
Цитата Сообщение от MrCold Посмотреть сообщение
C++
1
2
3
4
5
6
7
int main()
{
   Data data;
   data.mylink = "Empty";
   data.name * = "Empty";
// ПЕРЕДАЕМ СТРУКТУРУ Data В Form2 ПО ССЫЛКЕ 
   Form2 form2(data);
Ты уж определись или в консоли или в окнах работаем?
в окнах нет main
Цитата Сообщение от MrCold Посмотреть сообщение
C++
1
2
3
Form2 form2(data);
   // ПЕЧАТАЕМ ПОЛЯ Data
   std::cout << "Before : " << data.mylink << ' ' << data.name << std::endl;
печатать должна форма
Цитата Сообщение от MrCold Посмотреть сообщение
C++
1
2
// НАЖИМАЕМ КНОПКУ В Form2 ПРИСВАИВАЕМ ПОЛЯМ Data НОВЫЕ ЗНАЧЕНИЯ 
   form2.button_click();
это тоже должна делать форма
бритва Оккамы " Не плодите сущности, без необходимости"
и главное определись консольное приложение или оконное
где пишем WinAPI? MFC? CLI? Qt?

Добавлено через 1 минуту
Цитата Сообщение от MrCold Посмотреть сообщение
C++
1
2
3
4
5
class Form2
{
  public:
   Form2( Data & inData)
     : data(inData)
куда ты посылаешь inData?
у тебя нет родителя
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
07.12.2013, 19:53
Цитата Сообщение от ValeryS Посмотреть сообщение
Ты уж определись или в консоли
Это консоль

Цитата Сообщение от ValeryS Посмотреть сообщение
печатать должна форма
Сообщение от MrCold
.....................................
куда ты посылаешь inData?
у тебя нет родителя
ValeryS, пытался сделать по максимуму понятно.
отвечая на этот вопрос
Цитата Сообщение от landgen Посмотреть сообщение
И да, объясните, пожалуйста, что это такое вы сочинили в пабликах обеих форм. Похоже на конструкторы, что ли. Как это работает?
0
1 / 1 / 1
Регистрация: 20.03.2013
Сообщений: 77
07.12.2013, 20:01  [ТС]
Цитата Сообщение от MrCold Посмотреть сообщение
Какая- же она простая, адская смесь .NET-а и неизвестно чего.
И создавать вторую форму редко бывает нужно. Лучше вкладки дополнительные создавать
(например TabControl-ом).
А можете объяснить, как так получилось, что адская смесь дотнета и неизвестно чего? Просто, как я уже говорил, я в гуй потому и пока не лезу, что очень слабо в этом всем разбираюсь, но, тем не менее, я же просто в студии создал проект Windows Forms. И даже особо существенных изменений туда не вносил, выходит, студия уже сама за меня написала эту "адскую смесь"?)

Добавлено через 3 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
WinAPI? MFC? CLI? Qt?
Вот этого тоже не понимаю совершенно. Хочу "ну чтобы окошечки такие, настоящие открывались, а не консоль".
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
07.12.2013, 20:02
Цитата Сообщение от landgen Посмотреть сообщение
студия уже сама за меня написала эту "адскую смесь"?)
Хотел сказать что лучше не мешать стандартнй С++ и С++\СLI.
Писать на чем нибудь одном.
Например в С++\СLI.
Цитата Сообщение от landgen Посмотреть сообщение
статические поля
ведут себя не так как в стандартном С++
0
1 / 1 / 1
Регистрация: 20.03.2013
Сообщений: 77
07.12.2013, 20:03  [ТС]
Цитата Сообщение от MrCold Посмотреть сообщение
Например в С++\СLI.
ведут себя не так как в стандартном С++
Ну, теперь-то я уж вижу.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
07.12.2013, 20:04
Цитата Сообщение от landgen Посмотреть сообщение
Вот этого тоже не понимаю совершенно. Хочу "ну чтобы окошечки такие, настоящие открывались, а не консоль".
Скажу по секрету С++\СLI не учу, для окошек учу С#
С++\СLI не надо учить . Ну разве, интерфейс для лабораторной сделать.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
07.12.2013, 20:11
Цитата Сообщение от MrCold Посмотреть сообщение
Это консоль
серьезно
а что за формы в консоли?
Цитата Сообщение от MrCold Посмотреть сообщение
пытался сделать по максимуму понятно.
очень понятно
у класса нет родителя но мы вызываем какой то конструктор
Цитата Сообщение от MrCold Посмотреть сообщение
: data(inData)
data это кто?
Цитата Сообщение от landgen Посмотреть сообщение
Просто, как я уже говорил, я в гуй потому и пока не лезу, что очень слабо в этом всем разбираюсь, но, тем не менее, я же просто в студии создал проект Windows Forms.
ну так разберись
что есть гуй что есть форм( это кстати и есть дотнета) а что есть оконное приложение
есть универсальный справочник MSDN называется
0
1 / 1 / 1
Регистрация: 20.03.2013
Сообщений: 77
08.12.2013, 02:50  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
есть универсальный справочник MSDN называется
Я много оттуда читал, не понимаю тем не менее.

Добавлено через 5 часов 15 минут
Цитата Сообщение от ValeryS Посмотреть сообщение
гуй что есть форм
И вообще, а разве есть различие? Чем форма не графический интерфейс?
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
08.12.2013, 02:59
landgen, а для чего вам GUI. Вы учитесь ?
Если окошки преподаватель заставляет делать, то надо у него уточнять что выбрать
WinAPi, MFC и тд.
Если сами учите, то ясно что надо выбирать передовые
технологии. (WPF или Qt)
0
1 / 1 / 1
Регистрация: 20.03.2013
Сообщений: 77
08.12.2013, 03:35  [ТС]
Цитата Сообщение от MrCold Посмотреть сообщение
Если окошки преподаватель заставляет делать
Нет, я просто сам решил побаловаться. Я учу консольный он же нативный он же чистый c++, но при этом с детства мечта написать "чтобы кнопочки прям и вот крестик в верхнем правом углу".
Про MFC все говорят, что говно.

Добавлено через 1 минуту
А в Qt мне ничего не понятно, он у меня даже не ставится, ругаясь на какие-то библиотеки VS2012.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.12.2013, 03:35
Помогаю со студенческими работами здесь

Заполнение статического поля класса с клавиатуры
Доброго времени суток, возникла проблема. Я не могу задать статическое поле с клавиатуры. Задача: добавить статическое поле и 2 метода...

Рефлексия, получить содержание поля статического класса
static class Messange { public static readonly string mes = &quot;Привет&quot;; } необходимо только по имени...

Как задать значения статического поля класса используя рефлексию?
Народ как задать значение статическому полю класса при помощи рефлексии. Есть тема...

Как получить значения статического поля класса с помощью рефлексии?
Есть библиотека классов в ней некоторый класс А. у этого класса есть статическое поле - его ID. Class A{ static int ID; } в главное...

WPF Binding поля, в качестве поля - объекта класса
Есть вопрос, как можно выполнить биндинг поля объекта класса? Для примера есть такая конструкция: new MainClass(new PartA (Name =...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru