0

我有以下代码:

// 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”转换为“type2”。

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

我错过了什么吗?

4

1 回答 1

0

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

于 2014-12-30T22:42:26.703 回答