stringstream peek() 错误 C3867

stringstream peek() error C3867

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

编译时收到错误:

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);
            }


        }

    }

}

"I looked up this error and most say you forgot () when calling a function, however i do not believe this is my problem."

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

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

我翻译:编译器认为你 不是 试图调用 peek,因为你没有键入所需的 () 来这样做。因此,如果您有任何机会尝试获取函数地址,您应该在函数名称前加上 & 以使语法正确。

计算机是愚蠢的,我可以告诉你,但它们很少出错。