我正在尝试围绕非托管C ++静态库编写托管包装器(C ++ / CLI),并且遇到两个问题:
非托管库在其标头中使用std::shared_ptr
。包含<memory>
,标题编译为非托管项目的一部分。但是,当我在托管项目中包含此标头时,我收到此错误:
错误C2039:'shared_ptr':不是'std'的成员
如何从C ++ / CLI访问Values
的{{1}}集合?我似乎无法找到正确语法的任何示例,并且C#-style语法无法编译。
#1代码:
SortedDictionary<K, V>
答案 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
解决了问题。