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> >&)’
我已经按照这里给出的讨论!
更新
现在我得到一个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();
}
解决方案
问题是这一行:
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();
}
推荐阅读
- node.js - 如何在 Node 中使用“fs”在本地保存 FormData 图像文件
- oracle - Oracle 搜索不区分大小写的 CLOB
- c# - 对于 Azure B2C,是否可以通过声明发送用户主体名称?
- php - 在不同范围内的页面上的位置输出 PHP 变量值?
- c - 当输入为“1200”和“1300”时,如何使输出为“1”?
- php - Angular - PHP -> 发送邮件 null php 值
- c# - 没有 IIS 的 .Net / c# 上的 WebSockets(自托管)
- bash - 如何将换行符字符串保留为 bash 中的字符串?
- vbulletin - vbulletin 4.2.5 并在发送访问者消息后出现错误:未填写名为 contentid 的必填字段或
- ios - 屏幕上视频影响白色的设备亮度