请考虑以下代码段
class BST
{
struct Node
{
int data_;
Node * left_, * right;
} * root_ = nullptr;
public:
Node * getRoot()
{
return root_;
}
};
int main() {
BST bst;
auto root1 = bst.getRoot(); // Compiles fine
BST::Node * root2 = bst.getRoot(); // Gives error
}
当获取值并分配给使用auto推导出类型的变量时,代码编译得很好。显式指定类型时,它会失败。为什么这种行为上的差异?我希望两者都失败。
答案 0 :(得分:0)
问题是struct BST::Node
在class BST
内是私有的。请记住,class
默认为所有成员的私人访问权限,而不仅仅是实例成员和函数。
使用auto
很好,因为您从未明确提及私有类型。