gpt4 book ai didi

C++在对象属性上自动加载默认构造函数

转载 作者:搜寻专家 更新时间:2023-10-31 02:03:02 25 4
gpt4 key购买 nike

我是 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;
};
}

最佳答案

If TileMap has no arguments on constructor there is no problem, but I added three arguments and WorldMapState automatically tries to create an object with empty constructor. Why C++ works in that way?

因为您的 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);

或者使用 3 个参数使用内联初始化正确初始化 _tilemap:

private:
// ...
TileMap _tilemap{0, 0, 0};

或者在 cpp 文件的构造函数定义中使用构造函数初始化列表:

WorldMapState::WorldMapState(GameDataRef data)
: _tilemap(0, 0, 0)
{
// ...
}

当然,传递适合您情况的值。

关于C++在对象属性上自动加载默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56102459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com