无法访问私有成员 - template和std :: unique_ptr

时间:2015-02-04 18:19:41

标签: c++ templates c++11 unique-ptr

我有以下代码:

#include <memory>

template<typename T, size_t Level>
class Foo
{
    friend class Foo<T, Level + 1>;
    typedef std::unique_ptr<T> ElmPtr;
    typedef std::unique_ptr<Foo<ElmPtr, Level - 1>> NodePtr;        

    public:
    Foo() {
        // no errors
        auto c = children;
    }

    Foo(int n) {
        // !!! compiler error !!!
        auto c = children;
    }

    std::array<NodePtr, 4> children;            
};

template<typename T>
class Foo<T, 0>
{
    friend class Foo<T, 1>;

    public:
    Foo() {}
};

int main()
{
    Foo<int, 1> foo1;
}

我收到以下错误:

  

错误C2248:&#39; std :: unique_ptr&lt; _Ty&gt; :: unique_ptr&#39; :无法访问   在课程中声明的私人成员&#39; std :: unique_ptr&lt; _Ty&gt;&#39;

为什么呢?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:5)

你有:

auto c = children;

其中:

std::array<std::unique_ptr<T>, N> children;            

这需要复制unique_ptrunique_ptr不可复制。您可以参考children但是:

auto& c = children; // OK