Ошибка с шаблоном функции-члена - PullRequest
2 голосов
/ 09 декабря 2010

Я получаю ошибку компиляции в приведенном ниже коде.

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>();
}
};

Ответы [ 2 ]

3 голосов
/ 09 декабря 2010

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>()();
   }
};
3 голосов
/ 09 декабря 2010

Определение func<T>() не определяет его тип возвращаемого значения, что недопустимо в C ++.

Должно быть:

template<typename type> void func()
{
    type t;
    t.func();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...