ошибка с шаблоном функции - не была объявлена

0

Я занимаюсь некоторыми упражнениями, чтобы понять шаблон 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

----- файл 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
    Для компиляции я использую новый стандарт: g ++ -std = c ++ 11 test2.cpp main.cpp
  • 0
    Просто удалите аргументы my :: before T. Шаблоны не живут в пространствах имен.
Показать ещё 3 комментария
Теги:
templates

1 ответ

0

Имя T является идентификатором аргумента шаблона. Он не живет в каком-либо пространстве имен. Имена аргументов или локальные переменные также не могут быть квалифицированы. Просто удалите my::. Похоже, что версия с кодом my::myclass которая не была шаблоном функции, оставила без изменений версию кода.

С квалификацией вы ссылаетесь на имя в области пространства имен:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню