【问题标题】:Vector Subscript Out of Range C++ SFML向量下标超出范围 C++ SFML
【发布时间】:2021-10-23 10:22:03
【问题描述】:

我正在尝试制作一个程序,在屏幕上随机生成用户定义的圈数(使用 SFML),但是当我选择大于 6 的圈数时,我得到 Vector Subscript Out of Range 错误。任何等于或小于 6 的数字都可以按预期工作。

我已尝试查找错误消息,但我所看到的答案均不适用于我的代码。代码在第一个 for 循环处中断,但如果我注释掉第一个循环,它会在第二个循环处中断。

这是我的代码:

#include "SFML/Graphics.hpp"
#include <stdlib.h>
#include <iostream>

int main()
{
    srand(time(NULL));

    const int WINDOW_X = 800;
    const int WINDOW_Y = 480;

    sf::RenderWindow window(sf::VideoMode(WINDOW_X, WINDOW_Y), "Epidemic Simulation", sf::Style::Close | sf::Style::Titlebar);

    int numPeople = 10;
    float size = 5;
    int status = 0;

    std::vector<sf::CircleShape> person(size);

    for (int i = 0; i < numPeople; ++i)
    {
        if (status == 0)
            person[i].setFillColor(sf::Color::Green);
        else if (status == 1)
            person[i].setFillColor(sf::Color::Red);
        else if (status == 2)
            person[i].setFillColor(sf::Color::Black);
        else
        {
            std::cout << ("Error: Incorrect color value");
            person[i].setFillColor(sf::Color::Green);
        }
        person[i].setFillColor(sf::Color::Green);
    }

    for (int i = 0; i < numPeople; ++i)
    {
        int xPos = rand() % WINDOW_X - (size * 2);
        int yPos = rand() % WINDOW_Y - (size * 2);

        if (xPos < (size * 2))
            xPos = 0;

        if (yPos < (size * 2))
            yPos = 0;

        std::cout << ("X position: ") << xPos << (", Y position: ") << yPos << "\n";

        person[i].setPosition(xPos, yPos);
        person[i].setRadius(size);
    }

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear(sf::Color::White);

        for (int i = 0; i < numPeople; ++i)
            window.draw(person[i]);

        window.display();
    }

    return 0;
}

【问题讨论】:

  • 为什么sizefloat

标签: c++ vector sfml


【解决方案1】:

因为您使用 size = 5 启动 person(size) 并且循环上升到 numPeople = 10。你可能想写:

std::vector<sf::CircleShape> person(numPeople);

【讨论】:

  • 好的,谢谢!我认为括号内的变量应该改变圆的半径,而不是圆的数量。当我从 size 更改为 numPeople 时,它​​会更改数字,那么我将如何更改圆的半径?
  • 已经有了,size变量控制半径:person[i].setRadius(size);
猜你喜欢
  • 2020-06-01
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多