我有以下代码:
// 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
我错过了什么吗?