首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::shared_ptr & boost::shared_ptr差分

std::shared_ptr & boost::shared_ptr差分
EN

Stack Overflow用户
提问于 2013-04-23 14:07:09
回答 1查看 860关注 0票数 0

我有以下代码:

代码语言:javascript
复制
// interface.h
#ifndef INTERFACE_H
#define INTERFACE_H    

#include <memory>    
class IInterface {
public:
    virtual ~IInterface() = 0;
    virtual void doSomething() = 0;
};
inline IInterface::~IInterface() {}

typedef std::shared_ptr< IInterface > IIntPtr;    
IIntPtr makeInterface();    
#endif // INTERFACE_H


// impl.cpp
#include "interface.h"

class Interface : public IInterface { public:
    Interface() {}
    ~Interface() {}
    void doSomething() {} };

IIntPtr makeInterface() { return IIntPtr( new Interface() ); }

// main.cpp
#include "interface.h"
using namespace std;

int main()
{
    auto p = makeInterface();
    p->doSomething();
}

现在:如果我使用typedef std::shared_ptr< IInterface > IIntPtr;,一切都很好,但是如果我使用typedef boost::shared_ptr< IInterface > IIntPtr;,就会出现一些编译器错误:

  • 编译器错误C2027:在定义类型之前不能使用它。若要解决错误,请确保类型在引用之前已完全定义。
  • 编译器错误C2079:“标识符”使用未定义的类/结构/联合“名称”
  • 编译器错误C2440:编译器不能从“type1”转换为“type1 2”。

我使用的是msvc10,但是代码必须用msvc9.0编译,所以我必须使用Boos.SmartPtr

我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2014-12-30 22:42:26

OP在评论中回答了他自己的问题:在尝试Boost版本时,他忘了使用#include <boost/shared_ptr.hpp>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16171510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档