19 12
发新话题
打印

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

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

every body:
& n: D/ s) |4 U6 o3 d$ e1 A8 j4 r 我定义两个模板template1和template2;template1中具现template2并使用之;用法是调用template2的一个模块 函数。在gcc下会出现语法错误,找了很久无法突破!有那位朋友知道错在哪里,恳请告之,谢谢!GCC版本:3.3.4。示例代码如下:
复制内容到剪贴板
代码:
    [color=DarkGreen]/*
     * here is test.h
     */[/color]
    struct svalue   [color=DarkGreen] //template1要具现的类型[/color]
    {
          int v1;
          int v2;
    };
   
    template<class T>
    struct s_range_key_equal   [color=DarkGreen] //函数子,仿函数[/color]
    {
        bool operator() (int key,const T* pval)
        {
              if (key>=pval->v1 && key<pval->v2)
                     return true;
              return false;
        }
    };
   
    [color=DarkGreen]//模板对象2[/color]
    template<typename T>
    class CTemplate2
    {
    public:
         template<typename F>
         bool find_if(const int key)
         {
               F f;
               T val;
               val.v1 = 0;
               val.v2 = 1;
               return f(key,&val);
         }
    };
   
    [color=DarkGreen]//模板对象1[/color]
    template<typename T>
    class CTemplate1
    {
    public:
        bool method(const int key)
        {
              typedef s_range_key_equal<svalue> vltype;
              return m_example.find_if<vltype>(key);    [color=DarkGreen]//在这里提示语法错误[/color]
        }
   
    private:
        CTemplate2<svalue> m_example;
    };
   
    [color=DarkGreen]/*
     * here is test.cpp
     */[/color]
    #include <sys/types.h>
    #include "test.h"
   
    int main(int argc,char* argv[])
    {
         CTemplate1<svalue> t1;
        if (t1.method(0))
             return -1;
        return 0;
    }
      

TOP

对不起,不知道为什么排版过,一发布后格式就变了,还好代码不长,请多见谅!      

TOP

你觉得什么叫模板,和类什么区别?什么叫定义,什么是实例?      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

哦,flag是我在问问题,你问的问题随便在那本C++的书上都可以找到,我这里只关心为什么语法错误!如果你觉得这个问题的描述有问题,请直接指出,谢谢!      

TOP

那,跟你说阿,很简单的方法:7 s7 i) O' s, k9 F, `+ q
把你的定义放到模板里,看是不是有还没有交代清楚的声明。      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

概念是一回事,弄明白了就知道怎么用了,不弄明白用了就会错,这是和看多少遍没关系,但都要解决的问题。      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

[QUOTE=flag]那,跟你说阿,很简单的方法:
7 l7 I# M, J  Q0 v 把你的定义放到模板里,看是不是有还没有交代清楚的声明。[/QUOTE]
% S) f, T2 l6 O' s9 h to flag:
, [3 D  a6 W  k- H 你好,你的回答可否具体点?:p 可否将我贴的代码修改后贴上来?谢谢!      

TOP

[QUOTE=flag]概念是一回事,弄明白了就知道怎么用了,不弄明白用了就会错,这是和看多少遍没关系,但都要解决的问题。[/QUOTE]
; B$ r/ g; _% I3 ~% a' h! L 首先,我感谢你关注这个问题,谢谢!虽然你的回答没有任何实际价值!(请原谅我的直率)如果你认为我概念上有问题,恳请你用我的这个问题帮我指出。如果你也不太清楚,你可以不回答。      

TOP

[QUOTE=zigzag.jon]to flag:
3 r3 d/ E% H" Y 你好,你的回答可否具体点?:p 可否将我贴的代码修改后贴上来?谢谢![/QUOTE]
6 s0 S3 w, R& J! G9 J5 J5 |5 W哈,其实是很想你自己能解决这个问题,不过看样子你已经放弃了。      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

[QUOTE=zigzag.jon]首先,我感谢你关注这个问题,谢谢!虽然你的回答没有任何实际价值!(请原谅我的直率)如果你认为我概念上有问题,恳请你用我的这个问题帮我指出。如果你也不太清楚,你可以不回答。[/QUOTE]
& Y. E7 v( V7 Y% f我可以做不清楚状,如果你接受的话。      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

 19 12
发新话题