ниже мой код:Неопределенная ссылка на статический переменный шаблон класса
// types.h
template <typename T>
struct type_to_char {};
template <>
struct type_to_char<char> {
static constexpr char str[] = "baz";
};
// main.cpp
#include <iostream>
#include <string>
#include "types.h"
int main() {
std::cout << type_to_char<char>::str << std::endl;
return 0;
}
В попытке компилировать, компоновщик возвращает ошибку: undefined reference to type_to_char<char>::str
я столкнулся this answer, но я не уверен, как применить его в моем случае, поскольку шаблоны не скомпилированы. Должен ли я помещать отдельный файл .cpp
в проект?
В чем разница между декларацией и определением для переменных constexpr
? Такая переменная не может быть объявлена без инициализатора, поэтому почему я должен поместить отдельное определение в файл .cpp
?
Я был бы признателен за разъяснение по этому