Выражение должно иметь тип класса, но оно имеет тип "*shape"

Я пытаюсь создать вектор, как показано ниже:

std::vector<double> dimensions_data_vec{input_shape_pointer.get_dimensions()};

В этом коде input_shape_pointer является указателем на фигуру, такую ​​как прямоугольник. Форма имеет связанные с ней размеры, например. длина и ширина. Теперь мне нужно создать еще один отдельный класс, который получает указатель на фигуру и получает доступ к ее размерам. Для этого я использую фрагмент кода.

Функция get_dimensions() является частью класса shape и возвращает размеры фигуры в векторе, имеющем тип double.

Мой код выдает ошибку

Expression must have class type but it has type "*shape" (please note the asterisk here)

Мой вопрос: как мне get_dimensions() работать с формой до того, как вектор будет инициализирован, чтобы не было несоответствия, а dimensions_data_vec просто принимает двойные размеры вектора формы? Я думаю, что в любом случае может возникнуть проблема с инициализацией вектора другим вектором, но я хочу работать над одной проблемой за раз.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если input_shape_pointer является указатель для shape, тогда используйте -> вместо .. Например, выражение

input_shape_pointer.get_dimensions()

следует заменить на:

input_shape_pointer->get_dimensions()

Обратите внимание на использование -> вместо . в приведенном выше выражении.

Спасибо большое, моя ошибка ушла. Однако теперь я получаю ошибку сегментации с get_dimensions, которая выглядит так. std::vector<double>/get_dimensions(shape shape_ptr){ std::vector<double> dim_vec; for(int i{0}; i<2; i++){ dim_vec.push_back(dimensions_data[i]); } вернуть dim_vec; } где размеры_данные содержат измерения в двойном массиве.

purecobalt 08.04.2022 05:20

@purecobalt Перед разыменованием убедитесь, что указатель input_shape_pointer не не инициализирован. То есть убедитесь, что указатель указывает на какой-то shape объект, прежде чем разыменовывать его. В противном случае у вас будет неопределенное поведение, которое может привести к сбою.

Anoop Rana 08.04.2022 05:24

Я дважды проверил это, но не разыменовывал его. Я думаю, что ошибка seg связана с размерами_data[i], но не понимаю, почему это так, поскольку я инициализирую этот массив размером 3.

purecobalt 08.04.2022 05:33

@purecobalt Вы разыменовали указатель input_shape_pointer, когда писали: input_shape_pointer->get_dimensions(). Поэтому, прежде чем писать выражение input_shape_pointer->get_dimensions(), убедитесь (если еще не сделали этого), что input_shape_pointer указывает на какой-то shape объект. Если это по-прежнему не решит проблему, вы можете задать свой дополнительный вопрос как отдельный вопрос с достаточными подробностями, указанными в этом вопросе.

Anoop Rana 08.04.2022 05:36

Пожалуйста, объясните, как мне это сделать? Моя единственная идея - сделать это в основном коде.

purecobalt 08.04.2022 05:39

@purecobalt Например, вы можете сделать что-то вроде: shape s; s.setDimensions(5,6); shape* input_shape_pointer = &s; std::vector<double> dimensions_data_vec{input_shape_pointer->get_dimensions()};. Поскольку вы не предоставили достаточно информации в вопросе для отладки, мы не можем точно сказать, в чем проблема. В приведенном выше фрагменте я убедился, что input_shape_pointer указывает на объект s. Точно так же вы также должны убедиться в том же.

Anoop Rana 08.04.2022 05:41

Другие вопросы по теме