【问题标题】:error: reference to non-static member function must be called错误:必须调用对非静态成员函数的引用
【发布时间】:2013-09-08 22:12:31
【问题描述】:

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

【问题讨论】:

    标签: c++


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      看来,这一行:

      family[lname].push_back[fname];
      

      想看书

      family[lname].push_back(fname);
      

      顺便说一句,don't use std::endl。使用'\n' 获取换行符并使用std::flush 刷新流:使用std::endl 通常是一个性能问题,而且一开始就没有用处。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多