gpt4 book ai didi

C++ - 可访问性与可见性

转载 作者:行者123 更新时间:2023-11-28 04:28:51 28 4
gpt4 key购买 nike

我正在做一个练习来理解 C++ 的可访问性和可见性。

下面的代码显然不能编译,但这是理想情况下必须的。

B继承自A,模板参数为Node,Node为B私有(private)。

template<typename T>
class A {...};


template<typename T>
class B: public A<B<T>::Node> {
private:
struct Node{ int x=42;};
};

我的设想是:

template<typename T>
class A {...};


template<typename T>
class B: public A<B<T>::N> {
private:
struct Node{ int x=42;};
public:
typedef Node N;
};

我得到 Error: type/value mismatch at argument 1 in template parameter list for ‘template class A’ 这两个。

我真的很迷茫,感谢您的帮助。

最佳答案

问题是 B<T>::Node不能在该行中使用,因为 B<T>尚未完成。没有 B 的完整定义, 编译器不能使用嵌套类型。

如果你使用错误会更清楚:

template<typename T>
class B: public A<typename B<T>::Node> {
private:
struct Node{ int x=42;};
};

由此,g++ 会通过以下代码产生更容易理解的错误。

template<typename T>
class A {};

template<typename T>
class B: public A<typename B<T>::Node> {
private:
struct Node{ int x=42;};
};

int main()
{
B<int> b;
}

编译器错误:

socc.cc: In instantiation of ‘class B<int>’:
socc.cc:13:11: required from here
socc.cc:6:7: error: invalid use of incomplete type ‘class B<int>’
class B: public A<typename B<T>::Node> {
^
socc.cc:6:7: note: declaration of ‘class B<int>’
socc.cc: In function ‘int main()’:
socc.cc:13:11: warning: unused variable ‘b’ [-Wunused-variable]
B<int> b;
^

你评论过

More concretely the problem is that A is a Tree and B an array-like container that saves in memory my defined Node using the Tree structure. So container needs to use internally a tree of nodes. I suppose this is more or less a common design for data structures, so how can the problem be resolved typically?

这需要聚合而不是继承。

template<typename T>
class A { ... };


template <typename T>
class B {
private:
struct Node{ int x=42;};
A<Node> data;
};

关于C++ - 可访问性与可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53528815/

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