我正在学习Bjarne的书,并寻找成员类型
嵌套类可以访问其封闭类的成员,甚至可以访问私有成员(就像一个
成员函数有),但没有封闭类的当前对象的概念。
但是当我构建以下代码时,为什么我不会收到任何错误。
template<typename T>
class Tree
{
private:
using value_type = T;
class Node
{
private:
Node* right;
value_type value;
public:
void Node_Function(Tree*);
};
Node* top;
public:
void X_f()
{
}
};
template<typename T>
void Tree<T>::Node::Node_Function(Tree* p)
{
top = right; //I suppose to get error here like "error :
// no object of type Tree specified"
}
答案 0 :(得分:2)
有一条规则规定如果未使用类模板的成员,则该成员不实例化。这适用于您的情况。
你没有调用Node_Function()
,所以编译器没有实例化它,因此它没有看到问题。该函数仍然被解析为正确的语法检查 - 它不会尝试知道right
是什么,因为它可能是变量,函数名称,任何东西。
Here is a demo在调用时出错。
答案 1 :(得分:2)