成员函数模板错误
Posted
技术标签:
【中文标题】成员函数模板错误【英文标题】:Error with member function template 【发布时间】:2010-12-09 06:20:04 【问题描述】:我在下面的代码中遇到编译错误。
class A
public:
A()
~A()
void func()
cout <<"Ha ha ha \n";
;
class C
public:
C()
~C()
template<typename type> func()
type t;
t.func();
void callme()
func<A>();
;
【问题讨论】:
error C2275: 'A' : 非法使用这种类型作为表达式 你怎么打电话给callme()
?
【参考方案1】:
VC6 不支持成员函数模板。您实际上有几种解决方案:
将func()
移出类定义
template<typename type> void func()
type t;
t.func();
或重写callme()
void callme()
A a;
a.func();
或使用类模板
class C
public:
template<class T> struct func
void operator()()
T t;
t.func();
;
void callme()
func<A>()();
;
【讨论】:
【参考方案2】:func<T>()
的定义没有指定它的返回类型,这在C++中是无效的。
应该是:
template<typename type> void func()
type t;
t.func();
【讨论】:
但这不是真正的问题。 @sat, 如果我添加返回类型,g++ 编译代码不会出错。 Visual Studio 编译器是否仍然报同样的错误? 我正在研究旧的 VC6 编译器……这意味着 VC6 是罪魁祸首……非常感谢您的即时回复以上是关于成员函数模板错误的主要内容,如果未能解决你的问题,请参考以下文章