gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:56:02 24 4
gpt4 key购买 nike

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

这里是一些代码:

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

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

我假设我的问题是必须使用一个映射,其中 wstring 必须被固定/取消模板化,但第二个参数是我的模板类。

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

最佳答案

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

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

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

int main()
{
}

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

error C2143 : syntax error : missing ';' before '<'
error C2238 : unexpected token(s) preceding ';'
error C2988 : unrecognizable template declaration / definition
error C2059 : syntax error : '<'

还有:

error C2039 : 'map' : is not a member of 'std'

一旦我为 std::map 添加了一个包含,错误减少了:

#include <map>

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

error C2628 : 'Registry' followed by 'int' is illegal(did you forget a ';' ? )

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

关于c++ - 返回映射的模板化类成员函数的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34146141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com