C++传递对象时出现‘invalid use of non-static member’错误求助
解决C++中非静态成员函数调用错误:invalid use of non-static member function
这个编译错误其实很好排查——你在代码里把成员函数当成成员变量来调用了!
看错误提示里明确写了Trampoline::bounding_box()是个非静态成员函数,但你在landed方法里写的是this->bounding_box(没有加括号),这时候编译器会认为你想取这个函数的指针,而不是调用它返回bounding_box_t类型的碰撞盒对象,自然和detect_collision要求的参数类型不匹配,所以报错了。
修复方案
直接给bounding_box加上括号,让它执行函数调用:
void Trampoline::landed(Thrower* thrower){ if (detect_collision(this->bounding_box(), thrower->bounding_box())) thrower->speed.y = -2* thrower->speed.y; }
补充说明
- 从错误语境来看,
Thrower类里的bounding_box应该也是成员函数,所以同样要加()调用,这样传入detect_collision的就是两个合法的bounding_box_t对象了。 - 如果你原本的设计是把
bounding_box作为成员变量(而不是函数),那需要去头文件里修改类声明:把bounding_box_t bounding_box();改成bounding_box_t bounding_box;,同时要确保这个变量在类的实例化过程中被正确初始化。不过结合错误提示,显然当前它是成员函数,所以优先用加括号的方式修复。
内容的提问来源于stack exchange,提问作者Mahathi Vempati
相关产品推荐
相关产品推荐

