将char的2d向量传递给函数时的分段错误

时间:2019-02-16 23:22:04

标签: c++11

我想将类型为vector<vector<char>> p的变量传递到另一个声明为void foo(vector<vector<char>> &var)的函数中。要将p传递到foo中,我只做了foo(p)。这样做时出现以下错误

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

我已经按照here中的讨论进行了!

更新

现在,我收到一个Segmentation fault (core dumped)错误。我在下面附上一个简单的代码。

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

class foo{
  private:
    vector<vector<char>> b;
  public:
    foo(vector<vector<char>> &n){
      vector<vector<char>> 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(p[i][j]);
    }
    p.push_back(m_row);
  }

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

1 个答案:

答案 0 :(得分:3)

问题是这一行:

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);
}

此代码创建一个本地对象b,该对象在超出范围后将消失。

foo(vector<vector<char>> &n) {
    vector<vector<char>> b(n); // local object created
} // b dies here

相反,您必须执行以下操作:

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();
}
相关问题