返回映射的模板化类成员函数的声明
Declaration of templated class member function returning a map
在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"是非法的(您忘记了一个";"吗?)
这表明在类声明的末尾缺少一个分号。
相关文章:
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 将公共但非静态的成员函数与ALGLIB集成
- 使用指向成员的指针将成员函数作为参数传递
- 将重载的成员函数传递给函数模板
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 如何在C++中使用非静态成员函数作为回调函数
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 关联容器的下界复杂性:成员函数与非成员函数
- 在 C++ 中用派生类型重写成员函数
- 链表的泛型函数remove()与成员函数remove)
- 如何将lambda作为模板类的成员函数参数
- constexpr构造函数需要常量成员函数时出现问题
- 将自由函数绑定为类成员函数
- 区分非成员函数和头文件中的成员函数
- 如何从子成员函数修改父公共成员变量
- 保留对其他类的成员函数的引用
- 在运算符重载定义中使用成员函数(const错误)
- 内联如何影响模块接口中的成员函数
- 将成员函数指针作为参数传递给模板方法