C ++继承自具有std :: vector对象的父类的Child类

时间:2018-04-21 20:12:03

标签: c++ copy-constructor stdvector

我正在创建一些游戏以获得乐趣并更好地理解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)
{
}

1 个答案:

答案 0 :(得分:1)

<强>问题

你声明你的矢量:

std::vector<class Animation> animations;

这将转发声明 Animation,这是行不通的,因为std::vector需要知道实际的类,因为它使用需要拥有的内部数组正确的大小以适合Animation个实例。此外std::vector需要访问默认构造函数。

<强>解决方案

要解决此问题,您必须包含Animation.h并声明您的矢量:

std::vector<Animation> animations;

进一步说明

您应该更新您的问题,以包含相关的代码段,即Sprite.h。你的编译器告诉你这个。

您可能希望getAnimations()返回引用,否则每次调用时都会复制整个矢量。