#c #constructor
#c #constructor
Вопрос:
У меня есть класс, который я пытаюсь инициализировать, но получаю ошибку «Нет подходящего конструктора для инициализации ‘TextureCoordinates'»;
Класс, который я пытаюсь инициализировать:
class TextureCoordinates
{
public:
TextureCoordinates(){};
TextureCoordinates(Point2Damp; origin, Dimensions2Damp; dim);
Point2D getOrigin() const {return origin;};
Dimensions2D getDim() const {return dim;};
private:
Point2D origin;
Dimensions2D dim;
};
Строка с ошибкой компилятора:
TextureCoordinates result(point, Dimensions2D(width, height));
Определение конструктора:
TextureCoordinates::TextureCoordinates(Point2Damp; origin, Dimensions2Damp; dim):
origin(origin), dim(dim) {}
Есть идеи, что я делаю не так?
Комментарии:
1. Где определение конструктора? Все, что я вижу, это объявление.
Ответ №1:
Ваш конструктор принимает аргументы по неконстантной ссылке, но вы передаете ему временный объект ( Dimensions2D(width, height)
). Временные файлы, даже неконстантные, не привязываются к неконстантным ссылкам.
Решение, сделайте так, чтобы ваш конструктор принимал ссылки const (в любом случае, он не должен изменять переданные объекты):
TextureCoordinates(Point2D constamp; origin, Dimensions2D constamp; dim);
Ответ №2:
TextureCoordinates result(point, Dimensions2D(width, height))
Второй параметр — это значение rvalue, которое не может быть привязано к ссылке lvalue, ожидаемой конструктором:
TextureCoordinates(Point2Damp; origin, Dimensions2Damp; dim);
Вы можете исправить это, изменив подпись конструктора на
TextureCoordinates(Point2Damp; origin, const Dimensions2Damp; dim);
TextureCoordinates(Point2Damp; origin, Dimensions2Damp;amp; dim); // alternative for c 11
(если вы можете)
или превращение параметра в переменную
Dimension2D dim=Dimensions2D(width, height);
TextureCoordinates result(point, dim)
Ответ №3:
Временные переменные не могут быть переданы в качестве ссылки в C , потому что тогда вы можете изменить значение временного объекта в функции, который скоро исчезнет!! Для ссылки на константы такой проблемы не существует….. Итак, ваше определение функции должно быть похоже
TextureCoordinates(Point2D constamp; origin, Dimensions2D constamp; dim);
Ответ №4:
Объявите Dimensions2d снаружи.
Dimension2d d(width, height);
TextureCoordinates result(point, d);
Ответ №5:
вы написали реализацию :
TextureCoordinates(Point2Damp; origin, Dimensions2Damp; dim);