声明和定义不匹配



模板类中的声明和定义不匹配(所有不相关的内容都被删除(:

template <typename LanguageMap>
class WidgetLanguageManager
{
public:
enum class Language { DE, ENG, PL };
protected:
Language language;
//Some protected fields
public:
explicit WidgetLanguageManager(const Language& language);
explicit WidgetLanguageManager(const QString& language);
Language ToLanguage(const QString& language);
protected:
//some protected methods
};

template <typename LanguageMap>
Language WidgetLanguageManager<LanguageMap>::ToLanguage(const QString& language) // this cannot be matched with a declaration
{
for (QChar& c: language)
{
c = c.toLower();
}
switch (language)
{
case "german": return Language::DE;
case "english": return Language::ENG;
case "polish": return Language::PL;
}
throw RuntimeError("Wrong language paremeter.");
}

请帮忙,因为我看不出这背后有什么原因。

以下将起作用:

template <typename LanguageMap>
typename WidgetLanguageManager<LanguageMap>::Language WidgetLanguageManager<LanguageMap>::ToLanguage(const QString& language)
// ^^^^^ 'typename' keyword needed because 'Language' is dependent name

由于enum class LanguageWidgetLanguageManager模板类的一部分,因此需要在它前面加上scope运算符。

除了额外的typename,您还可以使用尾随返回类型:

template <typename LanguageMap>
auto WidgetLanguageManager<LanguageMap>::ToLanguage(const QString& language)
-> Language
{
/*..*/
}

相关内容

最新更新