Я следующий код:станд :: 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
я упускаю что-то?
Вы также включили соответствующий заголовок, когда вы переключаетесь на использование boost? –
Вы включаете заголовок Boost, '" boost/shared_ptr.hpp "?? Стандартный заголовок '' определяет только стандартный 'std :: shared_ptr'. –
yes: #include, когда я использую boost и , когда я использую C++ 11 –