C++11 将2d字符向量传入函数时出现分段错误

C++11 将2d字符向量传入函数时出现分段错误,c++11,C++11,我想将vector p类型的变量传递到另一个声明为void foo(vector&var)的函数中。要将p传递到foo中,我只需执行foo(p)。在执行此操作时,我得到以下错误 error: no match for call to ‘(std::vector<std::vector<char> >) (std::vector<std::vector<char> >&)’ 问题在于这一行: m_row.push_back(p[i][j])

我想将
vector p
类型的变量传递到另一个声明为
void foo(vector&var)
的函数中。要将
p
传递到
foo
中,我只需执行
foo(p)
。在执行此操作时,我得到以下错误

error: no match for call to ‘(std::vector<std::vector<char> >) (std::vector<std::vector<char> >&)’

问题在于这一行:

m_row.push_back(p[i][j]);
您将
pp
误输入为
p

相反,请使用以下命令:

m_row.push_back(pp[i][j]);
根据当前代码,它无法正确打印矩阵。为什么?因此:

foo(vector<vector<char>> &n) {
    vector<vector<char>> b(n);
}
相反,您必须这样做:

foo(vector<vector<char>> &n): b(n) {
}
foo(向量&n):b(n){
}
最终代码:

#include <iostream>
#include <vector>
using namespace std;

class foo{
  private:
    vector<vector<char>> b;
  public:
    foo(vector<vector<char>> &n): b(n) { }
    void print_foo() {
      for (int i = 0; i < b.size(); i++) {
          for (int j = 0; j < b[i].size(); j++) {
            cout << b[i][j];
          }
          cout << endl;
      }
    }
};

int main(int argc, char** argv) {
  char pp[4][4] = {
    {'1', '1', '1', '1'},
    {'1', '0', '0', '0'},
    {'1', '0', '0', '0'},
    {'1', '0', '0', '1'},
  };

  vector<vector<char>> p;
  for(int i = 0; i < 4; i++) {
    vector<char> m_row;
    for (int j = 0; j < 4; j++) {
      m_row.push_back(pp[i][j]);
    }
    p.push_back(m_row);
  }

  foo a(p);
  a.print_foo();
}
#包括
#包括
使用名称空间std;
福班{
私人:
载体b;
公众:
foo(vector&n):b(n){}
无效打印_foo(){
对于(int i=0;i请出示您的代码。包括编译器提供给您的完整错误消息(包括任何其他详细信息行)。我已经提供了我正在使用的代码,这是另一个为什么应该为变量使用有意义的名称的示例。执行
b=n
也不会打印任何内容。当我选中
b.size()
它打印
0
。知道为什么吗?
foo(vector<vector<char>> &n): b(n) {
}
#include <iostream>
#include <vector>
using namespace std;

class foo{
  private:
    vector<vector<char>> b;
  public:
    foo(vector<vector<char>> &n): b(n) { }
    void print_foo() {
      for (int i = 0; i < b.size(); i++) {
          for (int j = 0; j < b[i].size(); j++) {
            cout << b[i][j];
          }
          cout << endl;
      }
    }
};

int main(int argc, char** argv) {
  char pp[4][4] = {
    {'1', '1', '1', '1'},
    {'1', '0', '0', '0'},
    {'1', '0', '0', '0'},
    {'1', '0', '0', '1'},
  };

  vector<vector<char>> p;
  for(int i = 0; i < 4; i++) {
    vector<char> m_row;
    for (int j = 0; j < 4; j++) {
      m_row.push_back(pp[i][j]);
    }
    p.push_back(m_row);
  }

  foo a(p);
  a.print_foo();
}