所以我正在为我使用 C++17 和 SFML 设计的理论 CPU 制作一个模拟器。当将
CPU::Initialize()
函数放入构造函数时,我在 CPU.h 的第 24 行遇到了这些奇怪的错误:
no default constructor exists for class "sf::Sprite"
以及:
'sf::Sprite': no appropriate default constructor available
这是要调试的代码的非常精简的版本。
主要.cpp:
#include <iostream>
#include <sstream>
#include <string>
#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/Audio.hpp>
#include "CPU.h"
int main()
{
//Initialization
sf::RenderWindow window(sf::VideoMode({ 512, 512 }), "Emulator Window", sf::Style::Close);
CPU cpu;
while (window.isOpen())
{
//Standard SFML stuff
while (const std::optional event = window.pollEvent())
{
if (event->is<sf::Event::Closed>())
{
window.close();
}
}
//CPU loop
int data = cpu.getInstruction();
cpu.ReadInstruction(data);
//Graphics
window.clear(cpu.backcolor);
for (int i = 0; i < 256; i++)
{
window.draw(cpu.sprites[i]);
}
window.display();
}
}
CPU.h:
#pragma once
#include <vector>
#include <cmath>
#include <SFML/Graphics.hpp>
class CPU
{
public:
//Tile grid
std::vector<sf::Image> images{};
std::vector<sf::Texture> textures{};
std::vector<sf::Sprite> sprites{};
sf::Image blank;
sf::Texture texture;
sf::Sprite sprite;
CPU()
{
//Initialize tile grid
blank.resize(sf::Vector2u(8, 8), sf::Color(0, 0, 0, 0));
texture.loadFromImage(blank);
sprite.setTexture(texture);
}
};
由于这是一个编译器错误,所以我还无法运行代码。 我检查了 SFML sf::Sprite Class Reference,它说 sf::Sprite 确实有一个默认构造函数。有谁知道发生了什么事吗?
如果您查看 SFML3 迁移指南,您会发现,虽然
sf::Sprite
曾经在旧版本的库中拥有默认构造函数,但在版本 3 中已更改(删除了默认构造函数)。