从一对中获取价值失败:TYPENAME不提供呼叫运营商

时间:2013-04-25 09:00:19

标签: c++ poco-libraries std-pair

这是我想要做的。我想存储来自Http响应,标题和数据的de数据。我认为一种简单的方法是将响应和数据存储成一对。数据从LRU缓存中获取。 LRU缓存采用密钥(字符串)和对。 HTTPResponse采用POCO C ++ HTTPResponse对象的形式。但我无法从该对的第二个参数中得到字符串!

        this->clientCache = new LRUPersistentCache<string, pair<HTTPResponse, string > >(3,cachePath);



    pair<HTTPResponse,string> tmp = (*this->clientCache->get(headKey));// Get the pair
    cout << ((string*)tmp.second()).c_str();  //Should get the second object of the pair!
// But gives: Type std::basic_string<char> does not provide a call operator.

像下面这样写出同样的错误:

            cout << (*this->clientCache->get(headKey)).second().c_str();

我在这里做错了什么?

3 个答案:

答案 0 :(得分:1)

second是一个memeber值,不是标准中定义的函数

20.3.2类模板对

  

namespace std {
    模板
    结构对{
      typedef T1 first_type;
      typedef T2 second_type;
      首先是T1;
      T2秒;

因此,第二个成员值的正确用法是second而不是second()。除非它是你要使用的仿函数,否则不是你的情况。

答案 1 :(得分:1)

cout << ((string*)tmp.second()).c_str(); 
                ^^

你正在施放到string*。它应该只是string(或根本没有),因为second的{​​{1}}只是pair<HTTPResponse,string>

,第二个是正义成员而不是成员函数,所以它应该是string


tmp.second

答案 2 :(得分:0)

要访问货币对的元素,您需要:

pair_object.first
// or
pair_object.second

这些是普通成员变量,而不是访问者函数。见http://en.cppreference.com/w/cpp/utility/pair