作者trancewu (exile me)
看板EE_DSnP
标题[问题] invalid use of nonstatic data member _root
时间Tue May 20 18:50:36 2008
> compiling: adtTest.cpp
../../include/bst.h: In constructor
`BSTree<T>::iterator::iterator(BSTreeNode<T>*) [with T = AdtTestObj]':
../../include/bst.h:106: instantiated from `size_t BSTree<T>::size() const
[with T = AdtTestObj]'
adtTest.h:97: instantiated from here
../../include/bst.h:57: error: invalid use of nonstatic data member
'BSTree<AdtTestObj>::_root'
make[1]: *** [adtTest.o] Error 1
make: *** [all] Error 2
在make b时出现的问题,
完全不知道原因是什麽@@
97行是end() 106行是size(),
不过这些都不是static member function...
第57行是iterator constructor,
会用到_root。
先谢谢大家了!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.251.153
1F:推 ric2k1:你在 iterator 的 constructor 里试着使用 _root? 05/20 19:13
2F:→ ric2k1:他应该是看不到 _root, 除非他看得到 BSTree 这个 object.. 05/20 19:14
3F:→ trancewu:yes,I declared iterator as a friend of BSTree 05/20 19:14
4F:推 ric2k1:friend 只是让 BSTree 可以使用 iterator 的 private 05/20 19:16
5F:→ ric2k1:members 而不用透过 public methods, 他并不能改变 data 05/20 19:16
6F:→ ric2k1:member 的 access 必须经过实体的 object... 05/20 19:17
7F:→ ric2k1:除非是 static data member, 才可以用 ClassName::_data... 05/20 19:17
8F:→ ric2k1:这样没有透过物件的存取. 05/20 19:18
9F:推 ric2k1:不过 _root 应该是不能 declare 成 static. 否则所有的 05/20 19:19
10F:→ trancewu:不能在BSTree里这样宣告吗? 05/20 19:19
11F:→ trancewu: friend class BSTree<T>::iterator; 05/20 19:19
12F:→ ric2k1:BST 都会看到同样的一个 _root... 05/20 19:19
13F:推 ric2k1:可以, 但是重点是 _root 不是 static data member... 05/20 19:20
14F:推 ric2k1:除非你将 BSTree& 传给 iterator(), 否则 iterator() 怎麽 05/20 19:21
15F:→ ric2k1:可以看得到 _root? 05/20 19:21
16F:推 ric2k1:不过将 BSTree& 传给 iterator() 很奇怪 <-- you can't do 05/20 19:22
17F:→ ric2k1:this either. 05/20 19:22
18F:推 ric2k1:昨天 BattleRoyale 有问我一个类似的问题, 请他来现身说法 05/20 19:24
19F:推 ric2k1:一下? 05/20 19:24
20F:推 battlecruise:我有一个问题想请教 就是我iterator里 想用BSTree的 05/20 19:27
21F:→ battlecruise:function 请问该怎麽作呢? 在BSTree里宣告friend吗? 05/20 19:27