Только для Xcode 9 — Как устранить предупреждение [-Wundefined-var-template], вызванное статической переменной в шаблоне класса?

Пример кода компилируется без предупреждения или ошибки в Windows и Linux. Это начинает получать -Wundefined-var-template предупреждение в XCode 9.

foo.h:

template <typename T>
struct myClass
{
static const char* name;
};

foo.cpp:

#include "foo.h"template<>
const char *myClass<int>::name = "int";

warning: instantiation of variable 'myClass<int>::name' required here, but no definition is available [-Wundefined-var-template]

note: forward declaration of template entity is here
static const char *name;
^
note: add an explicit instantiation declaration to suppress this warning if 'myClass<int>::name' is explicitly instantiated in another translation unit

0

Решение

Что я пробовал, но не получилось:

  • Перемещение кода из foo.cpp в foo.h привело к ошибке «дубликата кода» во время компоновки, поскольку файл foo.h был включен в несколько файлов.
  • Добавление следующего кода в заголовочный файл может устранить предупреждение, но код завершается ошибкой во время выполнения.

    template<T>
    const char *myClass<T>::name = "";
    

Что сработало в итоге:

foo.h:

template <typename T>
struct myClass
{
static const char* name;
};

template <>
struct myClass<int>
{
static const char* name;
};

foo.cpp:

#include "foo.h"const char *myClass<int>::name = "int";
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]