我想将类型为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();
}
答案 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();
}