类 x(继承)C++ 不存在默认构造函数
Posted
技术标签:
【中文标题】类 x(继承)C++ 不存在默认构造函数【英文标题】:no default constructor exists for class x (inheritance) C++ 【发布时间】:2014-01-08 21:32:01 【问题描述】:我有以下三个标题:
IBaseStates.h
class IBaseStates
public:
enum STATE;
virtual void Update( STATE state ) = 0;
;
PlayerStates.h
#pragma once
#include "IBaseStates.h"
#include "Player.h"
class PlayerStates : public IBaseStates, public Player
public:
enum STATE
FLYING,
FALLING
;
int textureAmount;
PlayerStates();
~PlayerStates( );
void Update( STATE state );
;
Player.h
#pragma once
#include "StructVertex.h"
#include "SquareVertices.h"
#include "WICTextureLoader.h"
using namespace Microsoft::WRL;
using namespace DirectX;
//using namespace DirectX;
class Player : public SquareVertices
public:
Player( ComPtr<ID3D11Device1> d3dDevice );
~Player();
void Initialize();
void Update();
float x;
float y;
float z;
float rotation;
float velocity;
ComPtr<ID3D11Buffer> vertexbuffer;
ComPtr<ID3D11Buffer> indexbuffer;
ComPtr<ID3D11ShaderResourceView> texture[3];
protected:
const ComPtr<ID3D11Device1> d3dDevice;
;
为什么当我在我的 PlayerStates.cpp 文件中为我的 PlayerStates 类定义一个构造函数时,我会得到 p>
no default constructor exists for class Player
PlayerStates.cpp
#include "pch.h"
#include "PlayerStates.h"
PlayerStates::PlayerStates()
:
textureAmount( 3 )
【问题讨论】:
【参考方案1】:当您为类声明非默认构造函数时,编译器不再生成默认构造函数。所以你必须提供你自己的。
PlayerStates
需要在自己的默认构造函数中调用其基类Player
的默认构造函数。所以你要么需要为Player
提供一个默认构造函数,要么从PlayerStates
'默认构造函数初始化列表中调用它的非默认构造函数。
这隐式调用Player::Player()
。
PlayerStates::PlayerStates() : textureAmount( 3 )
这会调用单参数构造函数:
PlayerStates::PlayerStates() : Player(someComPtr), textureAmount( 3 )
【讨论】:
我已经声明了一个 Player 构造函数的 cpp 版本……你是这个意思吗? 您声明了一个带参数的设备,但这在这种情况下没有帮助(因为您的 PlayerStates 构造函数中没有 d3dDevice)。 @JamesT 不行,你需要给Player
一个默认构造函数。
默认构造函数是没有参数的。【参考方案2】:
Player
不能在没有ComPtr<ID3D11Device1> d3dDevice
的情况下创建,所以你的PlayerStates
构造函数必须找到一个并将其传递给Player
。
PlayerStates::PlayerStates()
:
Player( globalD3DDevice ),
textureAmount( 3 )
或者,如果这不是您想要的,请像您在 cmets 中提到的那样翻转继承。
【讨论】:
我知道我之前删除了我的评论,但与此相同的基础...我想保留在玩家腹部的 d3dDevice 不再被 PlayerStates 访问...即使我让 PlayerStates 成为 Player 的朋友......也许反过来是正确的?PlayerStates
需要访问ID3D11Device1
吗?
确实如此。我希望 PlayerStates 能够访问设备,以便我可以加载纹理......纹理加载功能需要一个指向设备的指针......我正在做这个继承来更好地组织代码......你怎么看?
你知道的,别担心..我会整理一些别的东西,谢谢你的帮助,伙计以上是关于类 x(继承)C++ 不存在默认构造函数的主要内容,如果未能解决你的问题,请参考以下文章