我制作了 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++ 的新手,所以也许我不理解其他地方的引用等。但似乎一切正常。没有找到解决问题的方法。提前致谢
您正在传递左值
但在这儿
您正在传递一个不能通过引用传递的临时对象。
解决方案选项 -
我会使用第二个选项...
另一种解决方案
我真的不喜欢它:)