Я пытаюсь исправить ошибку «явная специализация в области, не связанной с пространством имен», используя метод, описанный в в этом посте .Поэтому мне удалось переместить шаблонные функции в отдельное пространство имен, и я вызываю эти функции из своего класса (см. Код ниже).
Код теперь компилируется, однако я уже получаю ошибки компоновщика "определено в main.obj "для всех функций в пространстве имен.Я думал, что добавление #ifndef STYLE_H
вверху предотвратит многократное включение пространства имен или я что-то упустил?Как я могу исправить эту ошибку?
Ниже мой код (упрощенно):
#ifndef STYLE_H
#define STYLE_H
namespace hanzi {
namespace styleUtil {
template <class T>
T get(const QString& name, T defaultValue = T(), const Style* style = NULL, const Style* baseStyle = NULL) {
// ...
}
template <>
QColor get<QColor>(const QString& name, QColor defaultValue, const Style* style, const Style* baseStyle) {
// ...
}
template <>
ImagingEffect get<ImagingEffect>(const QString& name, ImagingEffect defaultValue, const Style* style, const Style* baseStyle) {
// ...
}
}
class Style : public QObject {
Q_OBJECT
public:
explicit Style(const QString& filePath);
template <class T>
T get(const QString& name, T defaultValue = T()) const {
return styleUtil::get<T>(name, defaultValue, this, baseStyle_);
};
};
}
#endif // STYLE_H