оператор << Ошибка сегментации - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь использовать (изучать) Векторы в C ++, и поэтому я написал это в качестве простого примера. Но я получаю сообщение об ошибке «Ошибка сегментации: ядро ​​сброшено», и я не знаю, где и в чем ошибка. Может кто-нибудь попытаться объяснить мне, что это такое?

'' '

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), возникает ошибка ошибки сегментации. Поэтому я в замешательстве. </p>

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Применено 2 модификации:

  1. Добавить включает
#include <vector>
#include <iostream>
Исправить для -l oop условие
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;
}
0 голосов
/ 02 апреля 2020

Ваша ошибка в условии для for l oop. Вы написали vertices.size(). Измените это на idx<vertices.size(), и все будет в порядке. Пока вы это делаете, вы можете изменить перегруженный оператор, добавив разделитель между y и z;)

...