gpt4 book ai didi

c++ - 无法访问私有(private)成员 - 模板和 std::unique_ptr

转载 作者:搜寻专家 更新时间:2023-10-31 00:33:34 26 4
gpt4 key购买 nike

我有以下代码:

#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;
}

我收到以下错误:

error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'

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

最佳答案

你有:

auto c = children;

地点:

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

那将需要复制 unique_ptr,而 unique_ptr 是不可复制的。不过,您可以引用 children:

auto& c = children; // OK 

关于c++ - 无法访问私有(private)成员 - 模板和 std::unique_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28328554/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com