Ошибки при передаче объекта по ссылке С++
Я сделал 2 класса У класса есть метод в которой передается ссылка на объект. Ссылка потому что объект большой по размеру и потому что это нужно быстро делать.
class RayTracePack {
public:
vector<RayTraceInfo> intersects;
RayTracePack() {
intersects.resize(0);
};
void append(RayTraceInfo& info) {
int i;
if (intersects.size() == 0) {
intersects.push_back(info);
}
else {
if (info.distance > intersects.back().distance) {
intersects.push_back(info);
}
else if (info.distance < intersects[0].distance) {
intersects.insert(intersects.begin(), info);
}
else {
for (i = 0; i < intersects.size() - 2; i++) {
if (intersects[i].distance < info.distance && intersects[i + 1].distance > info.distance) {
intersects.insert(intersects.begin() + i, info);
}
}
}
};
}
};
class RayTraceInfo {
public:
double shift;
double distance;
FlatSprite sprite;
RayTraceInfo(double shift_, double distance_, FlatSprite& sprite_){
shift = shift_;
distance = distance_;
sprite = sprite_;
};
};
Я передаю туда значения вот так
// rays :: RayTracePack
point = vision_sprites[i].getIntersection(center, to_point);
FlatSprite sp = vision_sprites[i];
rays.append(RayTraceInfo(vision_sprites[i].getShift(point), sqrt(point.sub(center).mul(point.sub(center)).sum()), sp));
Выдает ошибку:
Ошибка C2664 "void RayTracePack::append(RayTraceInfo &)": невозможно преобразовать аргумент 1 из "RayTraceInfo" в "RayTraceInfo &"
Visual Studio 2022 C++ Я новичок в C++ поэтому возможно еще где-то не понимаю ссылки т.д. но вроде все должно работать. Решение проблемы не нашел. Заранее спасибо
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Вы передаете l-value
void append(RayTraceInfo& info)
но тут
rays.append(RayTraceInfo(...))
вы передаете временный объект, который по ссылке передавать нельзя.
Варианты решения —
void append(RayTraceInfo info)
void append(const RayTraceInfo& info)
Я бы использовал второй вариант...
Еще одно решение
RayTraceInfo r = RayTraceInfo(...);
rays.append(r);
мне категорически не нравится :)