我正在创建一些游戏以获得乐趣并更好地理解C ++。我的第一个继承类有点问题。和大多数游戏一样,主要的父类是一个精灵,然而,我不是给每个人一个图像和一个矩形,而是给出一个动画和一个身体(这将是多种形状但是现在,它是'只是一个矩形。问题是无论我如何尝试重构任何复制构造函数,我都会继续得到这个编译错误:
Error C2036 'Animation *const ': unknown size (compiling source file Box.cpp)
它会导致出现此错误页面: https://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-1/compiler-error-c2036?
我的理解是,链中的某个地方出现了一个错误,我觉得它太新了。另一条重要信息是我使用std::vector
。每当我点击错误,它就会把我带到矢量文件。任何以' s结尾的变量是std::vector
,但是我会为复制构造函数中传递的所有变量输入变量类型,因此它很清楚。
如果下面的所有内容都没问题,那么如果您想要了解自己,我会加入我的Github回购:https://github.com/CalebADB/Static-Motion/tree/Box-UI
在评论中分散地告诉我还应包括哪些内容。
Box.cpp
Box::Box(const Sprite & source_sprite)
:
Sprite(source_sprite) //Sprite
{}
Sprite.cpp
Sprite::Sprite(const Sprite & source_sprite)
:
animations(source_sprite.animations), //std::vector<Animation>
body(source_sprite.body) //Rect
{}
Animation.cpp
Animation::Animation(const Animation & source_animation)
:
spriteSheet(source_animation.spriteSheet), //Surface
frameRects(source_animation.frameRects), //std::vector<Rect>
frameNum(source_animation.frameNum), //int
chroma(source_animation.chroma), //Color
holdTime(source_animation.holdTime) //float
{}
Rect.cpp
Rect::Rect(const Rect& source_rect) // copy ctr
:
orig_position(source_rect.position),
orig_dimension(source_rect.dimension),
position(source_rect.position),
dimension(source_rect.dimension)
{
}
答案 0 :(得分:1)
<强>问题强>
你声明你的矢量:
std::vector<class Animation> animations;
这将转发声明类 Animation
,这是行不通的,因为std::vector
需要知道实际的类,因为它使用需要拥有的内部数组正确的大小以适合Animation
个实例。此外std::vector
需要访问默认构造函数。
<强>解决方案强>
要解决此问题,您必须包含Animation.h
并声明您的矢量:
std::vector<Animation> animations;
进一步说明
您应该更新您的问题,以包含相关的代码段,即Sprite.h
。你的编译器告诉你这个。
您可能希望getAnimations()
返回引用,否则每次调用时都会复制整个矢量。