封闭类的当前对象的概念

notion of a current object of the enclosing class

本文关键字:对象      更新时间:2023-10-16

我正在学习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"
}

有一条规则规定,如果没有使用类模板的成员,则该成员不被实例化。这适用于你的情况。

您没有调用Node_Function(),因此编译器不会实例化它,因此它看不到问题。仍会对函数进行语法分析,以进行正确的语法检查—它并不试图知道right是什么,因为它可以是一个变量、一个函数名或任何东西。

这是一个演示,它在调用时出错。

您尚未尝试使用该函数模板,因此不会发生任何事情。

如果您使用调试并提供了一个带有main函数的测试用例来调用这个有问题的代码,那么您就会看到所查找的错误消息。

-像这样…