Вопрос

Я хотел бы использовать TM -структуру в качестве статической переменной в классе. Потратил целый день, читая и пытая

В моем классе, под общественностью, я объявил это:

static struct tm *dataTime;

В Main.cpp я попытался определить и инициализировать его с временным системным временем для проверки (фактическое время, которое нужно ввести во время выполнения)

time_t rawTime;
time ( &rawTime );
tm Indice::dataTime = localtime(&rawTime);

Но, похоже, я не могу использовать время () внешние функции.

main.cpp: 28: ошибка: ожидаемый конструктор, деструктор или преобразование типа до '(' token

Как инициализировать значения в статическом TM класса?

Это было полезно?

Решение

Вы можете обернуть вышеупомянутое в функцию:

tm initTm() {
    time_t rawTime;
    ::time(&rawTime);
    return *::localtime(&rawTime);
}

tm Indice::dataTime = initTm();

Чтобы избежать возможных проблем связывания, сделайте функцию статичной или поместите ее в неназванное пространство имен.

Другие советы

struct tm get_current_localtime() {
    time_t now = time(0);
    return *localtime(&now);
}

struct tm Indice::dataTime = get_current_localtime();

Оберните все это в функцию и используйте это, чтобы инициализировать статический член:

tm gettime() {
    time_t rawTime;
    time ( &rawTime );
    return localtime(&rawTime);
}

tm Indice::dataTime = gettime();

И вам не нужно (и, следовательно, не должно) использовать префикс -структуру с struct в C ++: tm достаточно, нет struct tm нужный.

Вы не можете вызвать функции произвольно внешни внешние функции. Либо делайте инициализацию в вашем main() функция или создать класс обертки вокруг tm структура с конструктором, который выполняет инициализацию.

Также обратите внимание, что ваш struct tm это указатель на TM -структуру. Возвращение с Localtime - это указатель Singleton, содержимое которого изменится, когда вы или кто -либо еще снова вызовут LocalTime.

Добавь это:

namespace {
  class Initializer {
    public:
      Initializer() { 
        time_t rawtime; time(&rawtime);
        YourClass::dataTime = localtime(&rawtime);
      }
  };
  static Initializer myinit();
}

Когда файл объекта инициализируется во время выполнения, называется конструктор инициализатор (), который затем устанавливает «глобальную» переменную, как вы хотите. Обратите внимание, что анонимная конструкция пространства имен помогает предотвратить потенциальные столкновения для имен имен и Myinit.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top