功能模板错误 - 尚未声明

时间:2014-11-15 08:01:08

标签: c++ templates

我正在做一些练习来理解C ++模板。我的目的是做一个改变模板类基础行为的函数模板。

我收到以下错误消息:

In file included from main.cpp:2:0:
test1.h: In function ‘int my::fun(char*, int)’:
test1.h:12:26: error: ‘my::T’ has not been declared

简化文件如下

------文件test1.h -------

#ifndef TEST_1_H
#define TEST_1_H

#include "test2.h"

namespace my
{
  template <typename T = myclass>
  int fun(char* str,int dim)
  {
    return my::T::fun(str,dim);  
  }
}

#endif

----- file test2.h -------

#ifndef TEST_2_H
#define TEST_2_H

namespace my
{
  struct myclass
  {
    static int fun(char* str,int dim);
  };
}  

#endif  

------文件test2.cpp --------

#include "test2.h"

namespace my
{
  int myclass::fun(char* str,int dim)
  {return 0;}
}

-----文件main.cpp -------

#include "test2.h"
#include "test1.h"

int main()
{}

你能帮我弄清楚哪里有错误吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

名称T是模板参数的标识符。它不会在任何名称空间中存在。参数名称或局部变量也不能被限定。只需删除my::即可。它似乎是一个使用my::myclass的代码版本的遗留代码,它不是一个函数模板。

使用限定条件,您指的是命名空间范围内的名称:

namespace my {
    struct T {};
    template <typename T>
    void f() {
         my::T from_namespace;
         T        from_template_argument;
    }
}