1 / 1 / 1
Регистрация: 20.03.2013
Сообщений: 77

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

06.12.2013, 02:39. Показов 2063. Ответов 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
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
08.12.2013, 03:42
Студворк — интернет-сервис помощи студентам
Если вас интересует мой выбор, то я за WPF. Пока круче ничего не придумали.
Сам учу. Со скрипом. Писать на с# правда нужно.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
08.12.2013, 07:34
Цитата Сообщение от landgen Посмотреть сообщение
Про MFC все говорят, что говно.
Все, это кто?
кто ни разу не видел?
Цитата Сообщение от landgen Посмотреть сообщение
Я учу консольный он же нативный он же чистый c++,
каким боком язык к интерфейсу программы?
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
08.12.2013, 13:20
landgen, 1) Обратите внимание, что "поля статического объекта класса" это не то же самое, что "статические поля класса".
2) Что же касается статического объекта, "When you declare a variable or function at file scope (global and/or namespace scope), the static keyword specifies that the variable or function has internal linkage." internal linkage - то есть, если в другом файле объявить переменную(объект) с таким же именем, это будут разные объекты
Цитата Сообщение от landgen Посмотреть сообщение
Однако если в Form1 что-нибудь написать в одно из полей, затем вызывать Form2 и уже там попытаться исполнить что-то вроде
Код C++
1
/*какая-нибудь переменная Form2*/ = Unamespace::datagram.name
Попробуйте, когда записываете и когда читаете, вычислить адрес объекта. Возможно, окажется, что адреса разные. То есть записываете в один объект, а считываете из другого.
C++
1
void* p = Unamespace::datagram.name;
0
1 / 1 / 1
Регистрация: 20.03.2013
Сообщений: 77
08.12.2013, 16:56  [ТС]
Цитата Сообщение от Alex5 Посмотреть сообщение
1) Обратите внимание, что "поля статического объекта класса" это не то же самое, что "статические поля класса".
Я понимаю. Как раз-таки пользоваться статическими полями меня научили, а вот статическими объектами - нет.
Цитата Сообщение от Alex5 Посмотреть сообщение
Попробуйте, когда записываете и когда читаете, вычислить адрес объекта. Возможно, окажется, что адреса разные. То есть записываете в один объект, а считываете из другого.
Мне кажется это довольно странным, т.к. объект статический и объявляется он в хидере. Впрочем, я решил забросить это дело.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.12.2013, 16:56

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

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

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

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

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


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

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

Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru