【问题标题】:error: no matching member function for call to 'push_back'/ String vectors [closed]错误:没有匹配的成员函数调用'push_back'/字符串向量[关闭]
【发布时间】:2020-11-09 19:30:53
【问题描述】:

问题是这样的:给定两个字符串数组 a1 和 a2,返回一个按 a1 字符串的字典顺序排序的排序数组 r,它们是 a2 字符串的子字符串。 前任: 输入:a1= arp, live, strong。 a2 = 活泼,活泼,竖琴,尖锐,阿姆斯壮。 返回 arp、live、strong。

我有以下类,当我编译代码时,我收到错误“错误:没有匹配的成员函数调用'push_back'”。我就是想不通是什么问题。

PS:成员函数的类和声明已经给出,我必须照原样解决问题。

class WhichAreIn {
public:
    static std::vector<std::string> inArray(std::vector<std::string>& array1, std::vector<std::string>& array2);
};
std::vector<std::string> WhichAreIn::inArray(std::vector<std::string>& array1, std::vector<std::string>& array2)
{
    int lengthArray1 = size(array1);
    std::vector<std::string> r; //resulting string
    for (int i = lengthArray1; i > 0; i--) {
        auto matchFound = find(array2.begin(), array2.end(), array1[i]);
        r.push_back(matchFound);
        break;
    }
    return r;
}

【问题讨论】:

  • 问题是matchFound的类型。

标签: c++ c++11 stdstring push-back


【解决方案1】:

matchFound 是一个必须取消引用的迭代器。

for(int i=lengthArray1;i>0;i--){
  auto matchFound= find(array2.begin(), array2.end(), array1[i]);
  if (matchFound != array2.end()) {
    r.push_back(*matchFound);
    break;
  }
}

【讨论】:

  • 菜鸟错误。我已经纠正了它,但现在抛出了一个异常:Caught std::exception, what(): basic_string::_M_construct null not valid。关于可能引发此异常的任何想法?
  • 迭代器需要有一个有用的值,见更新。
  • 不确定这里是否需要 break - OP 不需要向量并且可以返回单个字符串
  • @Slava 这可能是另一个错误。
猜你喜欢
  • 1970-01-01
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 2016-08-09
  • 1970-01-01
  • 2021-01-20
相关资源
最近更新 更多