Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для Джон Кофи
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1

Работа с указателем

31.05.2019, 15:30. Показов 1461. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет. Наверное очень глупый вопрос сейчас спрошу, но к вечеру пятницы голова вскипает на жаре 35 градусов, не соображаю, кондея пока нет.
Есть такой код:
C++
1
SomeClass *ptr = _response.return_->item[i];
мне нужно дальше работать с указателем класса SomeClass. А как это сделать? Как указателю указать на данные item[i]?
item - это указатель на другой класс, в котором почти все поля, как в SomeClass (конструктор позволяет принять указатель на этот класс и перенять нужные мне private данные). Но, если написать вот так, то он выдаст ошибку:
C++
1
2
SomeClass *ptr;
ptr(_response.return_->item[i]);
ошибка: called object type 'SomeClass *' is not a function or function pointer
нужен каст? я делал ptr = dynamic_cast<SomeClass*>(_response.retur n_->item[i]); И reinterpret_cast и простой сишный, ошибок нет в таком случае, но ptr nullptr в таком случае.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.05.2019, 15:30
Ответы с готовыми решениями:

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

Работа с указателем
Есть такой указатель: char *s=&quot;n1=1&amp;n2=2&amp;name=test&amp;sername=test2&quot;; Нужно выделить с этой стоки значение name, то есть...

Работа с указателем
#include &lt;ntddk.h&gt; NTSTATUS PsLookupProcessByProcessId(__in HANDLE ProcessId, __out PEPROCESS *Process); static VOID...

14
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
31.05.2019, 15:48
Цитата Сообщение от Джон Кофи Посмотреть сообщение
Как указателю указать на данные item[i]?
так у вас уже это написано в коде
C++
1
SomeClass *ptr = _response.return_->item[i];
другое дело являются ли экземпляры item[i] и SomeClass совместимыми
если item[i] указатель на экземпляр какого то класса в коде который похож полями на SomeClass то этого недостаточно
типы должны быть связаны друг с другом путем наследования что бы это работало

Добавлено через 4 минуты
Цитата Сообщение от Джон Кофи Посмотреть сообщение
конструктор позволяет принять указатель на этот класс и перенять нужные мне private данные
если я правильно понял то попробуйте так:
C++
1
SomeClass *ptr = new SomeClass(_response.return_->item[i]);
А если конструктор ожидает не указатель item[i] а ссылку тогда надо так: *_response.return_->item[i]
0
 Аватар для Джон Кофи
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
31.05.2019, 15:49  [ТС]
Цитата Сообщение от Undisputed Посмотреть сообщение
типы должны быть связаны друг с другом путем наследования что бы это работало
то есть, если у меня в конструкторе вот так:
C++
1
2
3
4
5
6
7
SomeClass::SomeClass(ClassB *BObject) :
    _name(BObject->name),
    _mkb(BObject->mkb),
    _parent(BObject->parent),
    _id(BObject->id)
{
}
то вот так работать не будет?
C++
1
SomeClass *ptr = _response.return_->item[i];
я вас правильно понял? нужно еще сделать вот так: class SomeClass : public ClassB ???
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
31.05.2019, 15:50
Цитата Сообщение от Джон Кофи Посмотреть сообщение
я вас правильно понял?
Выше сделал дополнение под ваш конкретный случай.
0
 Аватар для Джон Кофи
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
31.05.2019, 15:50  [ТС]
Цитата Сообщение от Undisputed Посмотреть сообщение
если я правильно понял то попробуйте так:
C++
1
SomeClass *ptr = new SomeClass(_response.return_->item[i]);
наверное оно, минуточку
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
31.05.2019, 15:51
Лучший ответ Сообщение было отмечено Джон Кофи как решение

Решение

надо память выделить и передать в конструктор этот указатель
чтоб свежий объект был сформирован на основе данных другого объекта
1
 Аватар для Джон Кофи
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
31.05.2019, 15:52  [ТС]
Undisputed, cпасибо! я действительно перепекся уже, вчера ведь так в другой части проекта писал.

Добавлено через 52 секунды
Цитата Сообщение от Undisputed Посмотреть сообщение
чтоб свежий объект был сформирован на основе данных другого объекта
да понятно, самочувствие плохое, думать никак.
0
31.05.2019, 15:53

Не по теме:


Джон Кофи,
ничего, бывает )
отдыхать надо

0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
31.05.2019, 15:59
Undisputed, а зачем там new?

Автор, тебе нужен именно указатель? Вот так не подойдет?
C++
1
SomeClass obj(_response.return_->item[i]);
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
31.05.2019, 16:05
Цитата Сообщение от DrOffset Посмотреть сообщение
Undisputed, а зачем там new?
по его словам я понял что ему нужен новый указатель
поэтому предположил что надо в динамической памяти
а так то да - можно на стеке создать объект и забрать его адрес
наверное зависит от того что конкретно нужно ТС
1
 Аватар для Джон Кофи
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
31.05.2019, 16:28  [ТС]
DrOffset, спасибо, сделал, как предложили- забрал адрес со стека.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
31.05.2019, 16:37
Джон Кофи,
Только не нужно забывать про срок жизни объекта
Если этот указатель будет использован после выхода из области видимости в которой сформирован объект на стеке
тогда этот указатель уже нельзя использовать
иначе оптимальнее как DrOffset подсказал
а если сам адрес вовсе не нужен а нужен только объект
тогда лучше использовать объект напрямую без промежуточных указателей
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
31.05.2019, 16:39
Цитата Сообщение от Джон Кофи Посмотреть сообщение
как предложили- забрал адрес со стека.
Пока кроме как подумать и рассказать о целях еще ничего не предлагали.
Может быть это и неправильно в твоем случае забирать со стека.
Дай больше данных о том как используется этот указатель - не надо торопиться: "семь раз отмерь, один раз отрежь."
0
 Аватар для Джон Кофи
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
31.05.2019, 16:51  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
не надо торопиться
эта часть кода в цикле, примерно 30к раз. Инициализация указателя сразу перед первым ифом.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        if(ptr == nullptr)
            return;
        if(ptr->getParent() == 0)
            _mRows.append(new SomeClassNode(ptr));
        else
        {
            QVector<TreeNode*> parents = findItems(SomeClass::ID, ptr->getParent());
 
            if(!parents.isEmpty())
                foreach(TreeNode *item, parents)
                    item->appendChild(new SomeClassNode(ptr));
            else
                _mRows.append(new SomeClassNode(ptr));
        }
после я с ним уже не работаю. Мне думается всё же правильней сделать так:
C++
1
SomeClass *ptr = new SomeClass(_response.return_->item[i]);
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
31.05.2019, 16:56
Цитата Сообщение от Джон Кофи Посмотреть сообщение
Мне думается всё же правильней сделать так:
Похоже на то.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.05.2019, 16:56
Помогаю со студенческими работами здесь

Работа с константным указателем
Ребят, добрый всем вечер!!! Помогите пожалуйста разобраться с задачей. есть константный указатель на строку LPCSTR FileName =...

Работа с указателем в функции
Доброго времени! Есть код вида: char far * pBuf; func(&amp;pBuf);

Работа с указателем на функцию
Пытаюсь сделать указатель, принимающий строку и возвращающий вектор интов, не получается с присвоением результата из указателя в переменную...

Работа с указателем на структуру
Здравствуйте. Во время выполнения нижеуказанного кода Visual выдаёт окно с ошибкой. Скорее всего, что-то не так с указателем на структуру....

Работа с указателем на void *
Добрый всем день. Помогите пожалуйста вот по какому вопросу. Имеется некая функция: void* str_replace( const char str ) { ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 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. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru