c++ - C ++在对象属性上自动加载默认构造函数
问题描述
我是 C++ 编程的新手,我遇到的问题是WorldMapState
该类会自动创建属性的新对象tile_map (TileMap)
。如果 TileMap 在构造函数上没有参数,则没有问题,但我添加了三个参数,WorldMapState 会自动尝试使用空构造函数创建对象。为什么 C++ 以这种方式工作?我该如何解决这个问题?
#pragma once
#include <SFML\Graphics.hpp>
namespace SaGa {
class TileMap : public sf::Drawable, public sf::Transformable
{
public:
TileMap(unsigned int width, unsigned int height, unsigned int tileSize);
bool load(const std::string& tileset, sf::Vector2u tileSize, const int* tiles);
void setSprite(unsigned int value, unsigned int x, unsigned int y);
private:
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const;
sf::VertexArray m_vertices;
sf::Texture m_tileset;
unsigned int _width;
unsigned int _height;
unsigned int _tileSize;
};
}
主班
#pragma once
#include <SFML\Graphics.hpp>
#include "State.hpp"
#include "Game.hpp"
#include "TileMap.hpp"
#include <vector>
namespace SaGa
{
class WorldMapState : public State
{
public:
WorldMapState(GameDataRef data);
void Init();
void HandleInput();
void Update(float dt);
void Draw(float dt);
private:
GameDataRef _data;
//sf::Texture _tilemap;
//std::vector<sf::Sprite> _tiles;
TileMap _tilemap;
};
}
解决方案
如果 TileMap 在构造函数上没有参数,则没有问题,但我添加了三个参数,WorldMapState 会自动尝试使用空构造函数创建对象。为什么 C++ 以这种方式工作?
因为您的TileMap
构造函数需要 3 个参数。它们不是可选的。添加另一个TileMap
不带参数的构造函数:
public:
TileMap();
TileMap(unsigned int width, unsigned int height, unsigned int tileSize);
或者使用现有构造函数的默认值:
public:
TileMap(unsigned int width = 0, unsigned int height = 0, unsigned int tileSize = 0);
或者_tilemap
通过使用内联初始化的 3 个参数正确初始化:
private:
// ...
TileMap _tilemap{0, 0, 0};
或者在 cpp 文件的构造函数定义中使用构造函数初始化列表:
WorldMapState::WorldMapState(GameDataRef data)
: _tilemap(0, 0, 0)
{
// ...
}
当然,传递适合您情况的值。
推荐阅读
- swiftui - SwiftUI 中的小部件 UI 预览
- django - GET 可以工作,但 POST 不能在 Docker 上工作
- ruby-on-rails - 范围内的随机数
- c - 为什么这个程序没有段错误?
- swift - Swift DateTime Formatter 返回具有匹配格式的 nil
- attributes - 如何使用 SRI 哈希和“onload”属性
- android - android 将 ExternalStorageProvider 转换为 MediaProvider
- vb6 - IE11 的 EOL 对使用 MSHTML 的 VB6 的影响
- android - DialogFragment 中的 ViewPager2 内的 EditText 不会显示键盘
- javascript - Javascript SetInterval 回调意外停止