成员函数模板错误

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&lt;T&gt;()的定义没有指定它的返回类型,这在C++中是无效的。

应该是:

template<typename type> void func()

    type t;
    t.func();

【讨论】:

但这不是真正的问题。 @sat, 如果我添加返回类型,g++ 编译代码不会出错。 Visual Studio 编译器是否仍然报同样的错误? 我正在研究旧的 VC6 编译器……这意味着 VC6 是罪魁祸首……非常感谢您的即时回复

以上是关于成员函数模板错误的主要内容,如果未能解决你的问题,请参考以下文章

多线程模板成员函数错误

抛出模板专业化错误的函数指针数组(包括成员函数)

将成员函数传递给模板函数时出现语法错误

使用模板类数据成员的c ++“没有适当的默认构造函数可用”错误

将模板参数传递给调用成员函数的函数

模板实现顺序表