封闭类的当前对象的概念

时间:2013-12-12 15:56:41

标签: c++ c++11

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

2 个答案:

答案 0 :(得分:2)

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

你没有调用Node_Function(),所以编译器没有实例化它,因此它没有看到问题。该函数仍然被解析为正确的语法检查 - 它不会尝试知道right是什么,因为它可能是变量,函数名称,任何东西。

Here is a demo在调用时出错。

答案 1 :(得分:2)

您没有尝试使用该功能模板,因此没有任何反应。

如果您使用testcase调试并提供main函数来调用此有问题的代码,那么您已经看到了所寻找的错误消息。

- Like this…