错误:必须调用对非静态成员函数的引用

时间:2013-09-08 22:12:31

标签: c++

我正在制作一个收集姓氏姓氏的程序,然后询问家庭成员的名字。我正在使用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;
}

2 个答案:

答案 0 :(得分:2)

对不起。应使用push_back而不是()来调用[]。解决了这个问题。

答案 1 :(得分:0)

看来,这一行:

family[lname].push_back[fname];

想要阅读

family[lname].push_back(fname);

BTW,don't use std::endl。使用'\n'获取换行符并使用std::flush来刷新流:std::endl的使用通常是性能问题,而不是首先使用。