微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Windows到Linux端口c ++错误

我正在将一个大的c ++应用程序从Windows移植到Linux,到目前为止,我一直在解决这些问题,并用标准代码replace了Windows特定的东西。

我遇到了一个像这样开始的模板

#define IC __attribute__((inline)) template <typename object_type,typename base_type = intrusive_base> class intrusive_ptr { private: typedef base_type base_type; typedef object_type object_type; typedef intrusive_ptr<object_type,base_type> self_type; typedef const object_type* (intrusive_ptr::*unspecified_bool_type) () const; ... public: IC intrusive_ptr(); IC intrusive_ptr(object_type* rhs); IC intrusive_ptr(self_type const& rhs); IC ~intrusive_ptr(); IC self_type& operator= (object_type* rhs); IC self_type& operator= (self_type const& rhs); IC object_type& operator*() const; // original IC object_type* operator->() const; // original ... }; #define TEMPLATE_SPECIALIZATION template <typename object_type,typename base_type> #define _intrusive_ptr intrusive_ptr<object_type,base_type> TEMPLATE_SPECIALIZATION IC typename _intrusive_ptr::object_type& _intrusive_ptr::operator* () const { VERIFY(m_object); return (*m_object); } TEMPLATE_SPECIALIZATION IC typename _intrusive_ptr::object_type* _intrusive_ptr::operator->() const { VERIFY(m_object); return (m_object); }

我无法理解一些事情。

这是什么原因?

无法为我的LruCache类定义模板化types

DLL-导出模板基类的静态成员

使用bat中的文件

完全专业的模板和dllexport

* nix上的模板方法专业化

typedef base_type base_type;

海湾合作委员会有问题,因为它“阴影模板parm”类base_type“”。 显然,它有一些目的,微软编译器必须允许它。

我也遇到了TEMPLATE_SPECIALIZATION的问题,如下所示

error: prototype for 'typename intrusive_ptr<object_type,base_type>::object_type& intrusive_ptr<object_type,base_type>::operator*() const' does not match any in class 'intrusive_ptr<object_type,base_type>'

error: candidate is: object_type& intrusive_ptr<object_type,base_type>::operator*() const

我不是最精通c ++的,因为它不是我的主要语言,但是到目前为止,通过尝试这个端口我学到了很多东西,并将继续学习很多东西。 我现在有点卡住这些错误,希望有人能够帮助。

谢谢。

C ++模板生产者消费者BlockingQueue,无界缓冲区:我如何优雅结束?

为什么我得到错误? 重载的运算符

用GDBdebugging模板

错误C2327:不是types名称,静态或枚举器

嵌套模板gcc编译器4.1.2错误

base_type的typedef非常简单:使模板参数列表中使用的类型对intrusive_ptr用户可用(尽管由于类型实际上是“私有的”,所以它并没有多大意义),类型是在模板定义。 微不足道的解决办法是改变代码

template <typename Object_type,typename Base_type = intrusive_base> class intrusive_ptr { private: typedef Base_type base_type; typedef Object_type object_type; // ...

我想这也解决了重载的问题:似乎没有找到正确的重载的问题是嵌套类型没有被定义的后续问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐