繁体   English   中英

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

[英]Declaration of templated class member function returning a map

在VC ++ 2015中,我有一个未模板化的类,该类应具有返回地图的模板化成员函数。

这是一些代码:

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

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

我认为我的问题是必须使用必须固定/未模板化wstring的映射,但是第二个参数是我的模板类。

当然,我遵循了编译器的建议,但这并没有让我进一步。

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

正如@Kevin和@juanchopanza在评论中指出的那样,您只是缺少分号和可能包含的内容。 使用VS2013中的以下程序:

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

int main()
{
}

我得到了您列出的各种错误:

错误C2143:语法错误:缺少“;” 在“ <”之前
错误C2238:';'之前的意外标记
错误C2988:无法识别的模板声明/定义
错误C2059:语法错误:'<'

并且:

错误C2039:“地图”:不是“ std”的成员

一旦为std::map添加include,错误将减少:

#include <map>

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

错误C2628:“注册表”后跟“ int”是非法的(您是否忘记了“;”?)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM