1

我正在开发一个程序,该程序收集姓氏,然后询问家庭成员的名字。我正在使用一个istringstream对象来分隔从getline. 对于我尝试在 中填充元素的步骤map,我收到以下错误。我知道您可以通过在名称后面的括号中提供密钥来创建密钥map。如果该方法有效,为什么会出现以下错误。

ex11_14.cpp:19:6: error: reference to non-static member function must be called
        family[lname].push_back[fname];

代码:

#include <iostream>
#include <map>
#include <vector>
#include <sstream>
int main()
{
    std::string lname, fname;
    std::string last, children;
    std::map<std::string, std::vector<std::string>> family;
    std::cout << "Enter family names" << std::endl;
    getline(std::cin, last);
    std::istringstream i{last};
    std::cout << "Enter children's names" << std::endl;
    while(i >> lname) {
        std::cout << lname << std::endl;
        getline(std::cin, children);
        std::istringstream j{children};
        while(j >> fname)
            family[lname].push_back[fname];
    }
    for(auto &c:family) {
        std::cout << c.first << std::endl;
        for(auto &w:c.second)
            std::cout << w << " ";
        std::cout << std::endl;
    }
    std::cout << std::endl;
    return 0;
}
4

2 回答 2

2

对不起。push_back应该用()not调用[]。修复问题。

于 2013-09-08T22:15:20.023 回答
0

看来,这一行:

family[lname].push_back[fname];

想读

family[lname].push_back(fname);

顺便说一句,不要使用std::endl. 用于'\n'获取换行符并std::flush刷新流:使用std::endl通常是一个性能问题,但一开始就没有用处。

于 2013-09-08T22:15:29.540 回答