class MyClass { SomeOtherClass * m_object; voID (SomeOtherClass::*m_callback)();public: MyClass(SomeOtherClass * _object,voID (SomeOtherClass::*_callback)()=NulL) : m_object(_object),m_callback(_callback) {} voID DoStuff() { //generates warning: NulL used in arithmetic when compiling with the AndroID NDK if (NulL==m_callback) { m_object->DonormalCallback(); } else { (m_object->*m_callback)(); } }};
为什么会产生警告,我该怎么办呢?
解决方法 我不认为你可以将0(或NulL)与成员函数指针进行比较,特别是因为它们可能实际上不是指针(例如,当函数是虚函数时).就个人而言,我会在没有比较的情况下重写if测试,例如:
voID DoStuff() { if (m_callback) { (m_object->*m_callback)(); } else { m_object->DonormalCallback(); }}
并且,对于奖励积分,在构造函数中执行此测试.
class MyClass { SomeOtherClass * m_object; voID (SomeOtherClass::*m_callback)();public: MyClass(SomeOtherClass * _object,m_callback(_callback) { // Use "DonormalCallback" unless some other method is requested. if (!m_callback) { m_callback = &SomeOtherClass::DonormalCallback; } } voID DoStuff() { (m_object->*m_callback)(); }};总结
以上是内存溢出为你收集整理的c – 为什么将成员函数指针与NULL进行比较会产生警告?全部内容,希望文章能够帮你解决c – 为什么将成员函数指针与NULL进行比较会产生警告?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)