类模板,函数成员定义
Class template, function member definition
我正在学习如何使用类模板。我读了很多例子,但我仍然有一些问题。
我在标题foo.h
:中有以下模板类
template<typename T>
class Foo
{
public:
bool addKey(const std::string& key);
bool addValue(const std::string& key, const T& value);
private:
std::map<std::string, T> mapping;
};
这是实现文件foo.cpp
:
template <typename T>
bool Foo<T>::addKey(const string& key)
{
if (key.empty())
return false;
pair<map<string, T>::iterator, bool> response; // to store the pair returned by insert()
response = mapping.insert(pair<string, T>(key, T()));
return response.second;
}
以下是编译错误(Kdevelop中的g++)
error: type/value mismatch at argument 1 in template parameter list for ‘template<class _T1, class _T2> struct std::pair’
error: expected a type, got ‘std::map<std::basic_string<char>, T>::iterator’
error: invalid type in declaration before ‘;’ token
error: request for member ‘second’ in ‘response’, which is of non-class type ‘int’
所以看起来std::pair
不能处理T
类型?
如果不保存insert()
返回的std::pair
,则编译工作正常。
在这种情况下,iterator
是一个依赖名称,您应该使用typename
关键字来限定它:
pair<typename map<string, T>::iterator, bool>
有关详细信息,请参阅此问题。
尝试写入对<typename映射:迭代器。迭代器是一种依赖于模板参数的类型,编译器需要一些帮助来识别它
相关文章:
- 类模板静态数据成员定义/声明/初始化
- 默认移动成员定义为已删除,而未定义特殊成员?
- 条件C++类成员定义
- 将类类型成员定义为公共和私有之间有什么区别?
- 有没有办法为静态对象成员定义一个符合开关标准的常量?
- C 不能将带有父类指针作为类型的静态模板成员定义引用
- 如何在 .cpp 文件中为私有类成员定义 friend 运算符<<而不是在标头中
- 为类模板的单个成员定义专用化
- 使用命名空间进行函数成员定义
- C 类静态结构成员定义
- C 替代成员定义
- C++:如何将数据成员定义为 const
- 模板超类的静态成员定义
- 如何为联合成员定义typedef
- 为类模板的枚举成员定义 std::hash
- 在越界成员定义的类型说明符中是否可以省略typename
- 更改成员定义的顺序会破坏内存
- 为什么不允许将类成员定义的' static '关键字放在命名空间范围内?
- 我是否应该在将实现委托给子类的类中包含成员定义?
- 在非限定id后的静态数据成员定义中使用的名称