我正在尝试在C++中使用(学习(Vectors,因此我将其作为一个简单的示例编写。但我得到了"分割错误:核心转储"的错误,我不知道错误在哪里,是什么。有人能解释一下吗?
''
struct Vertex {
int x,y,z;
};
std::ostream& operator<<(std::ostream& stream, const Vertex& vertex) {
stream << vertex.x << ", " << vertex.y << vertex.z;
return stream;
}
int main() {
std::vector<Vertex> vertices;
vertices.push_back({1,2,3});
for(int idx = 0; vertices.size(); idx++)
std::cout << vertices[idx] << std::endl;
}
''
这个错误是因为运算符重载(<<(吗?这只是一种预感。因为,当我使用g++11编译它时,它编译得很好,但当我看到输出时(使用命令./a.out(,就会出现分段错误。因此,我感到困惑。
应用了两个修改:
- 添加include
#include <vector>
#include <iostream>
- 修复循环条件
for(int idx = 0; idx < vertices.size(); idx++)
std::cout << vertices[idx] << std::endl;
完整的代码应该工作良好
#include <vector>
#include <iostream>
struct Vertex {
int x,y,z;
};
std::ostream& operator<<(std::ostream& stream, const Vertex& vertex) {
stream << vertex.x << ", " << vertex.y << ", " << vertex.z;
return stream;
}
int main() {
std::vector<Vertex> vertices;
vertices.push_back({1,2,3});
for(int idx = 0; idx < vertices.size(); idx++)
std::cout << vertices[idx] << std::endl;
}
您的错误处于for
循环的条件下。你写了vertices.size()
。将其更改为idx<vertices.size()
,您应该会没事的。在进行此操作时,您可能需要更改重载运算符,以便在y
和z
之间也包含一个分隔符;(