我正在制作一个收集姓氏姓氏的程序,然后询问家庭成员的名字。我正在使用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;
}
答案 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
的使用通常是性能问题,而不是首先使用。