封闭类的当前对象的概念
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
函数的测试用例来调用这个有问题的代码,那么您就会看到所查找的错误消息。
-像这样…
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 构造对象的歧义
- 使用"std::unordereded_map"映射到"std::list"对象