我正在做一些练习来理解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()
{}
你能帮我弄清楚哪里有错误吗?
提前致谢。
答案 0 :(得分:0)
名称T
是模板参数的标识符。它不会在任何名称空间中存在。参数名称或局部变量也不能被限定。只需删除my::
即可。它似乎是一个使用my::myclass
的代码版本的遗留代码,它不是一个函数模板。
使用限定条件,您指的是命名空间范围内的名称:
namespace my {
struct T {};
template <typename T>
void f() {
my::T from_namespace;
T from_template_argument;
}
}