gpt4 book ai didi

c++ - 类模板、函数成员定义

转载 作者:行者123 更新时间:2023-11-30 02:00:42 26 4
gpt4 key购买 nike

我正在学习如何使用类模板。看了很多例子,还是有一些问题。

我的 header 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>

参见 this question了解更多详情。

关于c++ - 类模板、函数成员定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14876840/

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