运算符<<分段错误



我正在尝试在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(,就会出现分段错误。因此,我感到困惑。

应用了两个修改:

  1. 添加include
#include <vector>
#include <iostream>
  1. 修复循环条件
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(),您应该会没事的。在进行此操作时,您可能需要更改重载运算符,以便在yz之间也包含一个分隔符;(

相关内容

  • 没有找到相关文章

最新更新