使用*this来初始化引用

Rup*_*ton 0 c++ constructor pointers reference argument-passing

我正在尝试ShadeRec使用其构造函数初始化我的类的实例:

ShadeRec(World& world);
Run Code Online (Sandbox Code Playgroud)

所以我转到它:

ShadeRec sr(*this);
Run Code Online (Sandbox Code Playgroud)

其中"this"是World类的一个实例.

我收到以下错误:

World.cpp: In member function ‘ShadeRec World::hitObjects(const Ray&) const’:
World.cpp:52: error: no matching function for call to ‘ShadeRec::ShadeRec(const World&)’
ShadeRec.h:17: note: candidates are: ShadeRec::ShadeRec(const ShadeRec&)
ShadeRec.h:15: note:                 ShadeRec::ShadeRec(World&)
Run Code Online (Sandbox Code Playgroud)

假设问题只是World实例具有属性const,我该如何摆脱此错误消息?

Jos*_*eld 7

您在hitObjects标记为的成员函数中执行此操作const.可以这样想:成员函数承诺不修改*this对象.但是,很高兴通过非const引用将其传递给不同的对象.如果那个其他对象修改了怎么办?哦哦!

有两种可能的解决方案取决于问题.ShadeRec构造函数是否实际修改了传递的World对象?

  1. 如果是,则应确保hitObjects未标记为const.毕竟,这将是撒谎.

  2. 如果没有,它应该采取它const World&.然后hitObjects,标记的const,可以传递*this给它.