我正在尝试使用(学习)C ++中的Vector,因此我将其编写为一个简单示例。但是我收到了“分段错误:核心已转储”的错误,并且我没有发现错误的位置和原因。有人可以解释一下我是什么吗?
'''
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)时,就会发生分段错误。因此,我很困惑。
答案 0 :(得分:0)
您的错误处于for
循环的情况下。您写了vertices.size()
。将其更改为idx<vertices.size()
,就可以了。
在使用它时,您可能需要更改重载运算符,以在y
和z
之间也包含一个分隔符;)
答案 1 :(得分:0)
应用了2个修改:
#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;
}