19 12
发新话题
打印

关于gcc使用模板嵌套时的问题

[QUOTE=flag]哈,其实是很想你自己能解决这个问题,不过看样子你已经放弃了。[/QUOTE]
$ J& I* K9 [6 L2 ? :confused::confused: 谢谢!谢谢你的好意!不知道论坛是用来干什么?不知道我为什么要问这个问题?问题我已经解决了,感谢你的好意!虽然,它让我一度产生误解。对不起,我误会了,我不应该问问题,我更应该学会自己解决问题!谢谢你,告诉我这些……      

TOP

试了一下,果真编译不过,不晓得为什么 下面这个简单的程序可以通过:
复制内容到剪贴板
代码:
#include <iostream>

using namespace std;

template <typename T>
class Foo
{
public:
    template <typename TT>
    int f(int i) {
        TT tt;

        tt = 0;
        cout << "Nothing" << endl;
        return 0;
    }
};

int main(int argc, char *argv[])
{
    Foo<int> foo_int;
    return foo_int.f<double>(123);
}
      
'
梅须逊雪三分白 雪却输梅一段香

TOP

我是搞不明白你为什么要在结构里弄个貌似操作重载的东西……      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

[QUOTE=flag]我是搞不明白你为什么要在结构里弄个貌似操作重载的东西……[/QUOTE]5 v8 d9 k: \6 o- j. ~2 ]
这个好像叫 functor 的      
'
梅须逊雪三分白 雪却输梅一段香

TOP

你的问题在于CTemplate2里函数成员模版的声明是错误的5 G# S$ E" O2 A
         template<typename F>
! W6 _0 v. v( J" d" F3 `# d         bool find_if(const int key)
2 c% C: X* Q9 p! n         {4 h  K( Q) |- m+ E* d& i
               F f;
+ l$ ~- k0 {7 d  u4 ~; d               T val;- E& Q9 X4 P' B) p
               val.v1 = 0;
; a2 t; E* ?9 U( L' \  l7 b               val.v2 = 1;
& j# n$ G! b3 f$ J6 p1 W2 s% M: a) E               return f(key,&val);; R1 f2 x' p6 ~7 v0 e
         }
% k) T# ~  `5 s) A
3 p6 n! M8 Q- [; z函数的声明中,无论是参数,还是返回值都没有用于类型参数,是不正确的。      

TOP

没有发现语法错误,但的确不知为什么不能编译通过。如果进行如下修改可以通过。
. I* Z4 s* F5 d, c2 z0 j
  i) A6 f; B" @* Q" k! J //模板对象2: X, N  `$ z* h5 u$ ~0 L, a
    //template<typename T>         注释掉这一行: A! C( I5 s" c7 P4 `
    class CTemplate2
! H$ Z: U% Q  n4 B+ _    {
9 `9 P; m& R7 G    public:
7 o" K/ d" a9 {# E, f2 M         template<typename F>
; J( q2 k& ^% p# q+ |; P8 `8 H4 ?         bool find_if(const int key)+ r0 s) t7 _. l8 W$ H5 C
         {  p; h" p1 W2 n1 D5 P& d
               F f;
5 A/ I+ @- Q* @               T val;
1 z. R* G6 Q8 @; _               val.v1 = 0;
/ |- g' `2 C1 M6 K" X: R9 g               val.v2 = 1;
8 I  J6 a2 y/ k. U, F8 [. R3 Z2 \               return f(key,&val);
' G1 p9 a. F. W- d7 o3 b7 m; O         }2 d% t+ R3 y4 _: M  B* l# P
    };, k8 y0 a8 c1 c3 C% }+ ^
    7 F5 M6 J/ ?0 X7 x
7 X. _. \: T; c, s: ]$ v; X2 r6 ]
$ w) v* d2 J% t; R1 l
    int main(int argc,char* argv[])
! ]+ L3 g2 C" W0 ?0 W( h) u/ j; l    {
4 \8 U3 X& h6 j% Y/ `- w        // CTemplate1<svalue> t1;
; Y, ^( Z/ c& g4 I    $ s8 m' {9 V+ n0 L8 V
     CTemplate1 t1;        //将CTemplate1改为非模版类, u6 S8 ~9 J! t! l6 u* H" N$ Y: I

7 x" v% D/ R3 `4 L5 Y        if (t1.method(0))3 K: y% J! `- l5 t& ]+ v
             return -1;. s5 f3 V9 ?4 l6 B( }! E4 Y9 \1 O
        return 0;  u/ a5 K5 k8 k5 y4 t
    }      

TOP

我又在VC8下编译通过了,应该不是语法问题,可能是gcc的BUG。      

TOP

gcc3.4.2下也可以过.      

TOP

zigzag.jon,我这里的gcc-3.4.3可以编译通过。3。4。3给你报了什么错误?怎么解决的?我有点好奇      

TOP

 19 12
发新话题