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
,我该如何摆脱此错误消息?
您在hitObjects
标记为的成员函数中执行此操作const
.可以这样想:成员函数承诺不修改*this
对象.但是,很高兴通过非const
引用将其传递给不同的对象.如果那个其他对象修改了怎么办?哦哦!
有两种可能的解决方案取决于问题.ShadeRec
构造函数是否实际修改了传递的World
对象?
如果是,则应确保hitObjects
未标记为const
.毕竟,这将是撒谎.
如果没有,它应该采取它const World&
.然后hitObjects
,标记的const
,可以传递*this
给它.