widget.h:39:32: error: no member named 'setThreadSafeReferenceCounting' in 'osg::Referenced'
时间: 2023-07-28 19:07:03 浏览: 100
widget.h
这个错误是由于osgEarth的版本更新导致的。在较新的版本中,osg::Referenced类已经移除了setThreadSafeReferenceCounting()和setThreadSafeRefUnref()两个函数。解决方法有两种:
1. 删除setThreadSafeReferenceCounting()和setThreadSafeRefUnref()函数的调用。
在较新的版本中,osg::Referenced类已经默认开启了线程安全的引用计数机制,因此不再需要手动调用setThreadSafeReferenceCounting()和setThreadSafeRefUnref()函数。可以将这两个函数的调用删除,仅保留dispose()函数的调用即可。
例如:
```
class MySkyNode : public osgEarth::SkyNode
{
public:
virtual ~MySkyNode()
{
this->dispose();
}
};
```
2. 使用线程安全的osg::ref_ptr类。
如果需要在多线程环境下使用osg::Referenced类,可以使用线程安全的osg::ref_ptr类来管理指针的生命周期。osg::ref_ptr类自带引用计数机制,可以避免手动调用setThreadSafeReferenceCounting()和setThreadSafeRefUnref()函数的问题。
例如:
```
#include <osgEarth/Sky>
#include <osgEarth/Registry>
osg::ref_ptr<osgEarth::SkyNode> skyNode = osgEarth::Registry::instance()->getOrCreateSky();
// 使用osg::ref_ptr来管理SkyNode的生命周期
```
阅读全文