vector, sfml и & quot; значение esp не было должным образом сохранено в вызове функции & quot; ошибка

У меня есть структура «Layer» и класс «LayerHandler». Слой состоит только из текстуры, спрайта и двух конструкторов — один по умолчанию и один со ссылочным параметром. Класс LayerHandler — это класс, который обрабатывает рисование всех слоев, которые у нас есть. Я добавляю слои в этот класс и позже использую win.draw (layerhandler_object), чтобы рисовать все. LayerHandler наследует от Drawable, чтобы сделать это, и он переопределяет виртуальный void draw ().

LayerHandler.h:

#ifndef LAYERHANDLER_H
#define LAYERHANDLER_H

#include <vector>
#include <SFML\Graphics.hpp>

using namespace std;
using namespace sf;

struct Layer {
Texture tex;
Sprite spr;

Layer() { }

Layer(Layer& l) {
tex = l.tex;
spr = l.spr;
}
};

class LayerHandler : public Drawable {
private:
vector<Layer*> layers;

virtual void draw(RenderTarget& target, RenderStates states) const {
for (int i=0; i<layers.size(); i++)
target.draw(layers[i]->spr, states);
}

public:
LayerHandler();
~LayerHandler();
void Add(Layer& layer);
};

#endif

LayerHandler.cpp:

#include "LayerHandler.h"
LayerHandler::LayerHandler() {

}

LayerHandler::~LayerHandler() {

}

void LayerHandler::Add(Layer& layer) {
layers.push_back(new Layer(layer));
}

и main.cpp:

#include <iostream>
#include <SFML\Graphics.hpp>
#include "LayerHandler.h"
using namespace std;
using namespace sf;

int main() {
RenderWindow win(VideoMode(800, 600), "Raven", Style::Default);
win.setFramerateLimit(60);
win.setVerticalSyncEnabled(true);
win.setMouseCursorVisible(false);

LayerHandler lhandler;

Layer back;
back.tex.loadFromFile("bao/gfx/back.png");
back.spr.setTexture(back.tex);
back.spr.setPosition(0, 50);

lhandler.Add(back);

Event evt;

float dt = 0.f;
Clock clock;
float dwticks = clock.getElapsedTime().asMilliseconds();
float dwnewticks = 0.f;

while (win.isOpen()) {
if (win.pollEvent(evt)) {
if (Keyboard::isKeyPressed(Keyboard::Key::Escape)) {
win.close();
}
} else {
dwnewticks = clock.getElapsedTime().asMilliseconds();
dt = dwnewticks > dwticks ? (dwnewticks - dwticks) / 4000.f : 0.f;
dwticks = dwnewticks;

win.clear();
win.draw(lhandler);
win.display();
}
}

return 0;
}

Я думаю, что это не сложно, и что я все сделал хорошо, но я получаю эту ошибку «Значение ESP не было должным образом сохранено через вызов функции». Я понятия не имею, почему я получаю эту ошибку. Я знаю, что это может быть вызвано несовпадающими соглашениями о вызовах, но я не вижу ничего подобного в своем коде … Я должен сказать, что это первый раз, когда я получаю эту ошибку, и я полностью отсутствует идей как с этим бороться. Любая помощь?

0

Решение

Не знаю почему, но проблема была в библиотеках SFML. Здесь я использую версию 2.2 для 32-битных приложений. Я скачал 32-разрядную версию 2.3 и скомпилировал мое приложение с новыми библиотеками 2.3, и теперь оно работает отлично.

0

Другие решения


По вопросам рекламы [email protected]