Я пытаюсь создать вектор, как показано ниже:
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
просто принимает двойные размеры вектора формы? Я думаю, что в любом случае может возникнуть проблема с инициализацией вектора другим вектором, но я хочу работать над одной проблемой за раз.
Если 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 Перед разыменованием убедитесь, что указатель input_shape_pointer
не не инициализирован. То есть убедитесь, что указатель указывает на какой-то shape
объект, прежде чем разыменовывать его. В противном случае у вас будет неопределенное поведение, которое может привести к сбою.
Я дважды проверил это, но не разыменовывал его. Я думаю, что ошибка seg связана с размерами_data[i], но не понимаю, почему это так, поскольку я инициализирую этот массив размером 3.
@purecobalt Вы разыменовали указатель input_shape_pointer
, когда писали: input_shape_pointer->get_dimensions()
. Поэтому, прежде чем писать выражение input_shape_pointer->get_dimensions()
, убедитесь (если еще не сделали этого), что input_shape_pointer
указывает на какой-то shape
объект. Если это по-прежнему не решит проблему, вы можете задать свой дополнительный вопрос как отдельный вопрос с достаточными подробностями, указанными в этом вопросе.
Пожалуйста, объясните, как мне это сделать? Моя единственная идея - сделать это в основном коде.
@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
. Точно так же вы также должны убедиться в том же.
Отвечает ли это на ваш вопрос? "Что я могу использовать вместо оператора стрелки
->
?", "В чем разница между оператором точки (.) и -> в С++?"