Как форматировать значения из членов Struct tm с помощью шаблонов C ++ - PullRequest
0 голосов
/ 26 апреля 2019

Мне была дана задача реализовать форматированный вывод значений Struct tm с использованием шаблонов C ++, но компилятор выдает ошибку: недопустимое использование неполного типа . Я не могу понять, как компилятор обрабатывает шаблон во время компиляции?

Я изучил основы программирования шаблонов и последовал нескольким небольшим примерам, но мне не удалось полностью понять концепцию, так как я новичок в шаблонах на C ++. Задача ограничивает функцию форматирования typedefed , например, так:

typedef /* place code here*/ date_dotted_format;

У меня есть структура now типа tm, которая содержит текущее местное время следующим образом:

time_t tmp;
struct tm now;
time(&tmp);
(void)localtime_r(&tmp, &now);

и я пытаюсь напечатать значения следующим образом:

std::cout << date_dotted_format(now) << std::endl; // Expected output: YYYY.MM.DD, e.g. 2019.04.26 

date_dotted_format был typedefed следующим образом:

typedef struct date_dotted_format date_dotted_format;

и реализация date_dotted_format находится в заголовочном файле, который выглядит следующим образом:

#include <ctime>

template<typename T>
String date_dotted_format(T now)
{
  struct tm my_tm;
  my_tm.tm_year = now.tm_year + 1900;
  my_tm.tm_mon = now.tm_mon + 1;
  my_tm.tm_mday= now.tm_mday;
  return (my_tm.tm_year + "." + std::setw(2) + std::setfill('0') + my_tm.tm_mon + "." + my_tm.mday);
 }

При компиляции я получаю следующие ошибки:

in file formatted_output.hpp
error: ‘String’ does not name a type
String date_formata(T now)
^

in file formatted_output.cpp
error: invalid use of incomplete type ‘date_dotted_format {aka struct main(int, char**)::date_dotted_format}’
   std::cout << date_dotted_format(now) << std::endl; // Expected output: 
YYYY.MM.DD, e.g. 2019.04.15

и следующие примечание :

note: forward declaration of ‘date_dotted_format {aka struct main(int, char**)::date_dotted_format}’
   typedef struct date_dotted_format date_dotted_format;

Могу ли я найти подсказку, где искать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...