发新话题
打印

请教一个C++模板的问题

请教一个C++模板的问题

以下代码可以在Solaris9下用CC编译通过,vc6也能通过,# s" p9 }: `$ j; [! |+ e. J
在FC4上用g++4.0却通不过,g++3.4.6报同样的错.$ z" `0 Z: o; H7 E6 C0 d% Q: O

! E( S6 a7 L& R3 T3 } t_set.h: In member function ‘void c_set<T>::foo()’:2 `3 u2 `: g* V' H6 A* b3 t
t_set.h:13: 错误:‘m_m1’ 在此作用域中尚未声明0 N+ A6 }" u2 e% z3 g( \+ O  K- ]
* w' X5 ]% b% ?3 g2 v7 F4 F

" F2 S& t4 t) G2 Y# f+ c 文件1 t_avl_tree.h
- N8 `+ c5 j1 T4 I! \ -------------------------------------------
8 e) n  {+ |- H. u9 O& N( ^9 ` #ifndef T_AVL_TREE_H2 z# f3 B% A4 ]8 ^
#define T_AVL_TREE_H
5 q" \5 _; h6 y " d8 n1 n) J5 G  ]2 d! c, b8 J/ p# q
class c_avl_tree_base# \0 Q2 u) o, S2 A: |4 Z# c
{
( f8 C6 }5 X- h4 q/ k/ [4 p/ b public:; I  h6 R$ D6 [5 H
     long m_m1;    / u; |: x; r8 q7 A( P+ q
};
7 N6 d5 w9 }1 m4 m #endif    //T_AVL_TREE_H
3 a" e( _6 b  l" }* T) q --------------------------------------------
$ v* |3 h; b/ \2 D: k8 T( N6 f 文件2 t_single_avl_tree.h' o" U. n( ~; V( Y, x* m5 Q1 d0 P
--------------------------------------------' ~1 u+ Y( D" S/ u
#ifndef T_SINGLE_C_AVL_TREE_H
9 a+ {. F( d0 ^ #define T_SINGLE_C_AVL_TREE_H
2 E- I$ l- ^/ P' |3 b
( U: p' [' h; n #include "t_avl_tree.h"& t5 _9 y3 q& s1 F8 Y' u
1 N6 o. X) l  A. k
template <class T>
0 O# G$ B  {+ X. S6 { class c_single_avl_tree : public c_avl_tree_base$ H2 J8 Q. g# A7 R' D- b/ A
{
/ E6 n* @' Y8 D3 u };' D6 y2 I& X; |9 L: J' a2 T
#endif    //T_SINGLE_C_AVL_TREE_H2 ]/ F' i7 c1 V; W  q
--------------------------------------------& s2 n, s# {% p) P. ]
文件3 t_set.h" K. ^# ?: d6 \' r
--------------------------------------------
, c  I8 j4 M7 v7 F #ifndef T_SET_H
" ^9 r+ V+ i/ ?3 }; P" G6 [- [( | #define T_SET_H9 o1 R' W: w; M. w4 s, [
, z+ m  Q+ O" t; \$ ~
#include "t_single_avl_tree.h", x- B6 `; G+ h% E* Y
) F) E. _7 A- S' H) L
template <class T>
# ^( k# p. q; R1 W# y class c_set    : public c_single_avl_tree<T>
5 ^! O1 W- m$ |# P) N& m1 O2 N {0 O4 F. ?2 v9 p' G- z* m8 Z$ o( R
public:4 a9 l5 u! X9 g3 ^3 D" P" W
     void foo() {
5 q" Y- Q3 J! H) _; D         m_m1 = 1;   
0 A0 S4 k# }5 P/ I' R     }
4 T3 m8 |$ d: E) v1 [. j2 V };
/ E5 j4 V: W3 e3 M% T* w
0 ^1 e. h5 X$ |" J' L* O8 \- w #endif    //T_SET_H9 D1 o; v! A3 ~: F2 E6 X' R7 R
--------------------------------------------
; f! J. H+ s8 H9 \ 文件4 main.cpp
8 f) e9 _- Q  s% j" ~9 g! ~ --------------------------------------------1 Z& y- s6 o5 l& B: w, q
#include "t_set.h"
0 ?% p( o+ v/ \0 S( g) G6 t/ J: W+ p
9 c5 u! [( H! Y  @, u int main(int, char **): h: y- J4 z, I4 g# e$ G
{& _3 X! T4 @8 m8 @  m7 e
     c_set<int> aa;* J1 y6 G& ]6 q! C! U
     return 0;
; M2 k$ B6 C) D: Y) P. P }! x/ W* j" C+ _0 ?

/ d& G1 h4 P- D1 M9 J& V% | --------------------------------------------      

TOP

看不明白你这样中间夹着模版继承来继承去有什么用意。      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

[QUOTE=flag]看不明白你这样中间夹着模版继承来继承去有什么用意。[/QUOTE]是从一份要移植的老代码里面抠出来的,不相干的部分都已经去掉了。只有语法上的意义,确实没有什么实际意义。      

TOP

模版类能否作为子类?并被继承?
( j7 R  j* |$ u8 b关系弄得很复杂……& W# X" |0 [2 }
建议搞清楚互相的关系,考虑用成员或者是友类。      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

3x!2 @3 U  V2 j$ S5 k4 H
正在看模板,看看能不能不改变已有接口。2 N! n4 b# p' I

, b  y- s, t; L8 B2 g, _怀疑是不是要加什么编译选项      

TOP

可能跟编译器有关吧      
[FONT=黑体]undefined[/FONT][SIZE=2]undefined[/SIZE][COLOR=Blue]undefined[/COLOR]小侠

TOP

做为好习惯, 在使用上一层的东西请写上, f+ u$ w% \; W6 z

, o+ b. }0 }4 v; _& F8 cCLASS_NAME::variable      
-----------------------------------------
http://www.darkspy.org/blog

自大的人把宗教当迷信,无知的人把迷信当宗教

TOP

多谢楼上的!7 T3 {8 K9 D4 T$ J+ S- C2 n
改成0 N$ X! d0 L7 E
c_single_avl_tree<T>::m_m1 = 1;
( Y! {- H5 M  _$ X! @6 P就可以了。
8 o+ n2 r4 U+ F奇怪g++为什么没有推断出来。查了编译选项也没看出什么头绪      

TOP

发新话题