从托管代码中包含时,未定义shared_ptr

时间:2011-07-18 17:51:58

标签: visual-studio-2010 c++-cli shared-ptr

我正在尝试围绕非托管C ++静态库编写托管包装器(C ++ / CLI),并且遇到两个问题:

  1. 非托管库在其标头中使用std::shared_ptr。包含<memory>,标题编译为非托管项目的一部分。但是,当我在托管项目中包含此标头时,我收到此错误:

    错误C2039:'shared_ptr':不是'std'的成员

  2. 如何从C ++ / CLI访问Values的{​​{1}}集合?我似乎无法找到正确语法的任何示例,并且C#-style语法无法编译。

  3. #1代码:

    SortedDictionary<K, V>

2 个答案:

答案 0 :(得分:6)

shared_ptr位于<memory>而不是<functional>。使它看起来类似于:

#pragma managed(push, off)
#include <memory>
#include "yourUnmanagedLibrary.h"
#pragma managed(pop)

第二个问题(请问一个问题):

using namespace System::Collections::Generic; 
...
    SortedDictionary<int, String^>^ coll = gcnew SortedDictionary<int, String^>;
    coll->Add(1, "one");
    coll->Add(0, "zero");
    for each (String^ value in coll->Values) {
        Console::WriteLine(value);
    }

答案 1 :(得分:3)

我在这里找到答案:Edit $(IncludePath) "macro" in Visual Studio 2010

Visual Studio 2010包含Visual Studio 2008中的标题,其中没有shared_ptr

描述了精确的分辨率here。 “常规”选项卡上的“平台工具集”默认为vs90。将此更改为vs100解决了问题。