返回映射的模板化类成员函数的声明

Declaration of templated class member function returning a map

本文关键字:成员 函数 声明 映射 返回      更新时间:2023-10-16

在VC++2015中,我有一个未模板化的类,它应该有一个返回映射的模板化memberfunction。

这里有一点代码:

class Registry
{
    template<class configclass>
    std::map<std::wstring, configclass> enumerateSubKeys(std::wstring subKeyName);
}

但是编译器抛出错误消息:
错误C2988:无法识别的模板声明/定义
错误C2143:语法错误:"<"前缺少";"
错误C2238:";"前出现意外的令牌
错误C2059:语法错误:"<"

我认为我的问题是必须使用一个映射,其中wstring必须被修复/取消模板,但第二个参数是我的模板类。

当然,我遵循了编译器的建议,但这并没有让我走得更远。

您需要#include <map>并在类声明的末尾添加一个分号。

正如@Kevin和@juancopanza在评论中指出的那样,你只是缺少了一个分号和一个可能的include。在VS2013中使用以下程序:

class Registry
{
    template<class configclass>
    std::map<std::wstring, configclass> enumerateSubKeys(std::wstring subKeyName);
}
int main()
{
}

我收到了你们列出的各种错误:

错误C2143:语法错误:缺少";"在'<'之前
错误C2238:";"前面有意外的令牌
错误C2988:无法识别的模板声明/定义
错误C2059:语法错误:"<"

还有:

错误C2039:"map":不是"std"的成员

一旦我为std::map添加了include,错误就会减少:

#include <map>
class Registry
{
    template<class configclass>
    std::map<std::wstring, configclass> enumerateSubKeys(std::wstring subKeyName);
}

错误C2628:"Registry"后面跟着"int"是非法的(您忘记了一个";"吗?)

这表明在类声明的末尾缺少一个分号。