导出具有std :: stack <std :: unique_ptr <t>&gt;类型的私有成员的类时出错c2248

时间:2016-04-25 13:11:09

标签: c++ c++11 stl stack unique-ptr

为什么我会收到此错误:

Error   2   error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>' c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory0 606 1   UNIQUE_PTR

尝试使用__declspec(dllexport)导出此课程时?

class __declspec(dllexport) A
{
private:
    std::stack<std::unique_ptr<int>> ints;
};

我正在使用vs2012

3 个答案:

答案 0 :(得分:0)

我不知道Visual Studio所以我不能确定错误消息的含义,但我可以看到你的类是不可用的:唯一的成员变量是私有的,你没有写任何方法来访问它

答案 1 :(得分:0)

据我所知,std :: stack假设元素可以复制,但对于std :: unique_ptr则不是这样,必须移动

所以问题是std :: stack无法访问std :: unique_ptr的私有拷贝构造函数,而不是std :: stack本身是私有的。

答案 2 :(得分:0)

根据https://support.microsoft.com/en-us/kb/168958,您可能在导出stackunique_ptr时遇到一些困难。 (由于stack使用deque

  

某些STL类包含嵌套类。这些类不可能   出口。例如,deque包含一个嵌套的类deque :: iterator。   如果您导出deque,您将收到必须导出的警告   双端队列::迭代器。如果导出deque :: iterator,则会收到警告   你必须出口deque。这是由设计限制引起的   一旦模板类被实例化,就无法重新实例化   并出口。 当前可以导出的唯一STL容器   是矢量。其他容器(即map,set,queue,list,   deque)都包含嵌套类,无法导出。