运算符 << 分段错误

operator << Segmentation Fault

我正在尝试使用(学习)C++ 中的向量,因此我将其编写为一个简单示例。但是我得到了 'Segmentation fault: core dumped' 的错误,但我不知道错误在哪里,是什么错误。谁能给我解释一下,这是什么?

'''

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),出现分段错误。因此,我很困惑。

您的错误在 for 循环的条件中。你写了 vertices.size()。将其更改为 idx<vertices.size(),您应该没问题。 当你这样做的时候,你可能想改变你的重载运算符以在 yz 之间包含一个分隔符 ;)

应用了 2 个修改:

  1. 添加包含
#include <vector>
#include <iostream>
  1. 修复 for 循环条件
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;
}