学生が、Open Scene Graph の(だめだめな)C++ ソースのエラーを持って来るのだが、さっぱりわからない。
class Box {
Box(osg::Node node,vector3f &x,vector3f &y);
}
Box::Box(osg::Node node,vector3f &x,vector3f &y) {
....
}
....
Box b = new Box(n,vector3f(0,0,0),vector3f(0,0,0));
良さそうに見えるんですけど。Xcode って note とかは出すが、エラーメッセージが意味不明。
Warning: matching candidate Box(osg::Node ,vector3f &,vector3f &);
わかりません。
取り敢えず、
vector3f v1(0,0,0);
vector3f v2(0,0,0);
Box b = new Box(n,v1,v2);
としてみる。これは動く。reference でないとダメなのか。なるほど。
そこで、 Effective C++ 第3版を見ると、
値渡しでなく const 参照渡しにする
と書いてある。そうか!
class Box {
Box(osg::Node node,const vector3f &x,const vector3f &y);
}
Box::Box(osg::Node node,const vector3f &x,const vector3f &y) {
....
}
....
Box b = new Box(n,vector3f(0,0,0),vector3f(0,0,0));
なら通るようです。まぁ、確かに、気持ちは理解できる。でも一時変数ぐらい自動で作っても良いんじゃないか?
もう、この Brain Damaged な C++ とは付き合いたくない...
No comments:
Post a Comment