2013-04-23 5 views
0

Я следующий код:станд :: shared_ptr и повышение :: shared_ptr разница

// 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 Ошибка: 'идентификатор' использует 'имя' не определено класс/структуры/объединения
  • Compiler Error C2440: компилятор не может отлиты из 'type1' до 'type2'.

Я использую msvc10, но код должен быть собран с msvc9.0 так что я должен использовать Boos.SmartPtr

я упускаю что-то?

+3

Вы также включили соответствующий заголовок, когда вы переключаетесь на использование boost? –

+3

Вы включаете заголовок Boost, '" boost/shared_ptr.hpp "?? Стандартный заголовок '' определяет только стандартный 'std :: shared_ptr'. –

+0

yes: #include , когда я использую boost и , когда я использую C++ 11 –

ответ

-1

ОП ответил на свой вопрос в комментариях: он забыл #include <boost/shared_ptr.hpp> при попытке версии Boost.

Смежные вопросы