【问题标题】:stringstream peek() error C3867stringstream peek() 错误 C3867
【发布时间】:2017-11-18 16:42:36
【问题描述】:

我有一个类的方法,它接受一个键变量并在未完成的映射中查找键。值是一个字符串example: "12132, jack_arog, 1990:12:8:3:25:3";方法将使用字符串流中的peek() 来识别','' ' 以忽略它们并将其余部分放入向量中。 Afterwards 方法将向量的成员分配给对象的属性。

编译期间收到错误:

if (ss.peek() == ',' || ss.peek == ' ')
    ss.ignore();

Error   C3867   'std::basic_istream<char,std::char_traits<char>>::peek': non-standard syntax; use '&' to create a pointer to member

我查了这个错误,大多数人说你在调用函数时忘记了 (),但我不相信这是我的问题。

方法:

void Account::find_account(std::string name, std::string ID)
{
    std::string key = name + "," + ID;
    Account new_account;

    std::unordered_map<std::string, std::string>::const_iterator got = map.find(key);

    if (got == map.end())
        std::cout << "not found";
    else
    {
        std::string my_string = got->second;

        std::vector<std::string> holder;
        std::stringstream ss(my_string);
        std::string i;

        while (!my_string.empty() && ss >> i)
        {
            holder.push_back(i);

            if (ss.peek() == ',' || ss.peek == ' ')
                ss.ignore();
        }

        for (int i = 0; i < holder.size(); i++)
        {
            if (i = 0)
                new_account.ID = holder.at(i);
            if (i = 1)
                new_account.account_holder = holder.at(i);
            if (i = 2)
            {
                std::string::size_type sz;
                new_account.amount_available = std::stof(holder.at(i), &sz);
            }
            if (i = 3)
            {
                new_account.date_created = holder.at(i);
            }


        }

    }

}

【问题讨论】:

  • ss.peek == ' ' 缺少 () 吗?
  • ooOOOOmmmGGGGG,谢谢你uuuu
  • :-p 这只是你编码时间过长的标志。休息时间!大声笑
  • 我知道:D,我可能应该一起重做这个方法,它非常丑陋。
  • 我在 SO 上看到的情况更糟。我觉得它看起来不错:)

标签: string visual-studio c++11 header-files peek


【解决方案1】:

“我查了这个错误,大多数人说你在调用函数时忘记了 (),但我不相信这是我的问题。”

当你的编译器告诉你错误就在这一行时,你怎么能这么说呢?此外,它告诉您该错误与您对 peek 的(ab)使用特别相关,我引用:

"...peek': non-standard syntax; use '&' to create a pointer to member

我翻译:编译器认为您没有尝试调用 peek,因为您没有键入 required () 来执行此操作。因此,如果您有机会尝试获取函数地址,则应在函数名称前加上 & 以确保语法正确。

计算机很笨,我会告诉你,但它们很少出错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 2012-02-01
    • 1970-01-01
    相关资源
    最近更新 更多