C++ 为什么可以';我的好友类不能访问私人成员吗?
我想当一个类声明一个friend类时,friends可以访问庄家的私有成员?情况似乎不是这样,或者我做错了什么。我正在尝试访问OULinkedList中的“第一个”或“最后一个”。当我尝试使用“first”或“last”时,会出现“not declared in this scope”错误 我需要访问“first”,因为如果没有它,我的下一个函数将永远不会返回链表的第一个值,而且我不知道其他方法如何执行 例如,如果我只想打印列表中的对象,下面的while循环总是跳过第一个对象C++ 为什么可以';我的好友类不能访问私人成员吗?,c++,pointers,linked-list,enumeration,friend,C++,Pointers,Linked List,Enumeration,Friend,我想当一个类声明一个friend类时,friends可以访问庄家的私有成员?情况似乎不是这样,或者我做错了什么。我正在尝试访问OULinkedList中的“第一个”或“最后一个”。当我尝试使用“first”或“last”时,会出现“not declared in this scope”错误 我需要访问“first”,因为如果没有它,我的下一个函数将永远不会返回链表的第一个值,而且我不知道其他方法如何执行 例如,如果我只想打印列表中的对象,下面的while循环总是跳过第一个对象 while(enu
while(enumerator.hasNext()){
cout << enumerator.next();
}
while(枚举数.hasNext()){
电流=第一;
}
模板
布尔OulinkedListNumerator::hasNext()常量{
如果(此->当前->下一步!=NULL){
返回true;
}否则{
返回false;
}
}
模板
T oulinkedListNumerator::next(){
T successorNode=*此->当前->下一步->数据;
本->当前=本->当前->下一步;
返回成功节点;
}
模板
T oulinkedListNumerator::peek()常量{
如果(当前!=NULL){
返回*当前->数据;
}否则{
抛出新的ExceptionLinkedListAccess;
}
}
OULinkedListEnumerator
是OULinkedList
类模板中的嵌套类模板。与任何嵌套类一样,它应该能够完全访问封闭类模板的私有成员OULinkedList
,而不需要任何友元声明template <typename F>
friend class OULinkedListEnumerator;
模板
友元类oulinkedlistenmerator;
引用全局类模板::oulinkedListNumerator
,并使其成为朋友。稍后,您将声明一个嵌套类模板OULinkedList::OULinkedListEnumerator
。这是一个完全不同的类模板。它不是一个朋友。(但不必如此,见2)T
更改为其他名称。事实上,我很惊讶您能够在没有首先解决参数命名问题的情况下将代码编译到所谓的“访问问题”的程度相关的,甚至重复:,但是+1会吸引很多人,我看不到
while(enumerator.hasNext()){
在您发布的代码中的任何位置。可能重复的请不要在收到回答后破坏问题。这在堆栈溢出上是不允许的。我犯了一个错误,没有澄清我在尝试访问“first”或“last”时收到的投诉—“未在此范围内声明”,并且我没有使用“first”或“last”“最后"代码中的任何地方。我将友元类声明更改为“F”而不是“T”。这可能是问题的一部分吗?如果我在声明中将其声明为“F”,那么在OulinkedListNumerator中定义也必须是F吗?@Adam G:我看到您在友元声明中将T
更改为F
,但您仍然是u在oulinkedListNumerator
的实际声明中使用T
。这怎么可能?您的oulinkedListNumerator
实际上是一个嵌套类模板吗?还是您只是忘记了关闭}
在您发布的代码中定义了OULinkedList
之后?请发布真实代码,而不是一些虚构的草图。
template <typename F>
friend class OULinkedListEnumerator;