作者a3785lexx (Alex)
看板EE_DSnP
标题[请益] BSTree::iterator的constructor compile不过@@?
时间Fri Dec 4 18:31:54 2009
呜......原本打算无声无息的自己写完bst的
结果到头来还是要来麻烦大家orz
事情是这样的...
今天我好不容易写完bst...怎知compile怎麽样都不给过囧
简单介绍一下(有雷!,
虽然我论会进来看的都应该是已经写完或不用写的强者XD)
我的iterator里面采用了_root,_node,_trace三个data member
来储存关於一个BSTreeNode的资讯
_root就纪录了到底这个_node是从哪棵树的根开始长的
_trace应该大家都知道了...吧XD?
这三个data member我都放在private里面,都非const且非static
然後我的constructor有两种
一种就是用iterator作initialize
另一种用两个BSTreeNode<T>*,也就是_root和_node作initialize
写法是:
iterator(传参数):初始化_root和_node{updateTrace();}
updateTrace()是一个函数可以让我把_trace走到_node目前在的地方
其实可以传参数BSTreeNode<T>*
不传的话就是从_root作出发点
可是呢....我拿去compile的时候,正义的compiler就说:
174: error: invalid use of non-static data member
'BSTree::iterator::_itrRoot'
175: error: invalid use of non-static data member
'BSTree::iterator::_trace'
174、175就是我宣告这两个变数的地方
可是在他们上面作邻居的_node就完全没有事情
所以私心怀疑是updateTrace();这个函数的问题??
可是我另外写了一个小程式
也是在initialize的时候会跑去叫一个会存取到data member的函数
他就没有出事
所以不太懂到底为甚麽会被指正说_itrRoot和_trace一定要是static...orz
外面也没有任何会有需要直接在没有物件生成的时候就去找_itrRoot
还有_trace的情况......
另外我前後检查了好几次...大概没有漏掉{}或是;的样子囧
烦请各位高手指点迷津了XD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.37.102.31
1F:→ a3785lexx:啊...我知道了orz...刚刚又多作了一点点实验 12/04 18:42
2F:→ a3785lexx:发现是不能把这两个变数拿去当作参数default用... 12/04 18:42
3F:→ a3785lexx:就算是member function的parameter default也不行 12/04 18:43
4F:→ a3785lexx:但是如果可以的话,会有什麽问题吗?? 12/04 18:43
5F:→ a3785lexx:也就是说为甚麽当初会禁止这样使用呢?? 12/04 18:43
6F:推 ric2k1:因为在 constructor 的 initializer list 时 data member 12/04 22:00
7F:→ ric2k1:还没有被建立起来, 所以当然不能拿来用. 要到 { 才算是建好 12/04 22:01
8F:→ a3785lexx:我当时会那样写觉得应该不会出事的想法是... 12/05 04:34
9F:→ a3785lexx:跑到constructor的initializer list之後data member就 12/05 04:34
10F:→ a3785lexx:建好了,所以进到{}里面去call updateTrace() 12/05 04:35
11F:→ a3785lexx:应该不会出包才对... 12/05 04:35
12F:→ a3785lexx:不过看来好像事实是nonstatic data member 12/05 04:36
13F:→ a3785lexx:就不能拿去给member function的parameter当default值用 12/05 04:37
14F:→ a3785lexx:XD? 12/05 04:37