【问题标题】:How to copy a pointer to incomplete type - C++如何将指针复制到不完整类型 - C++
【发布时间】:2014-07-30 18:29:30
【问题描述】:

我正在尝试将指针myTexture的内容复制到指针texture(类成员)中,如下代码所示:

Sprite::Sprite(SDL_Renderer *renderer, SDL_Texture *myTexture) {

    // Initialize texture
    this->texture = myTexture;
}

但是,我需要让texture 不仅仅指向与myTexture 相同的对象,因为我希望能够修改texture 而不会影响myTexture。我试过使用复制构造函数,但编译器说不允许不完整的类型。我不太确定如何在不指向同一个对象的情况下创建该对象的副本。

提前感谢您的帮助。

【问题讨论】:

  • 你试过this->texture = new SDL_Texture(*myTexture);还是不行?
  • @MattPhillips 是的:incomplete type is not allowed。我不太了解如何绕过不完整的类型。
  • 包含SDL_Texture的定义有问题吗?你为什么要避免它?
  • @MattPhillips:当类型不完整时,您将无法访问任何成员,包括构造函数。据你所知,一个可访问的构造函数甚至可能不存在。
  • @RSahu 这是一个库的一部分,所以我很确定我不能这样做,但我可能错了。

标签: c++ pointers deep-copy sdl-2 incomplete-type


【解决方案1】:

您不能调用复制构造函数,或者通常访问不完整类型的任何成员。毕竟,这就是它不完整的原因。您不应该知道该类型甚至支持复制或其他任何内容。

我想说的是只包含整个类型,而不是仅仅前向声明它,然后就可以了。


编辑:我可以补充一点,我们在这里讨论的是 SDL 纹理类型。 This type 看起来甚至不支持复制。例如,它具有“prev”和“next”指针,以及似乎指向渲染器对象的指针。几乎不是一个值类。

看起来你应该在这里重新考虑你的设计,真正的问题不是不完整的类型,而是“如何复制SDL_Texture的内容。”

【讨论】:

  • 我会这样做,但是 SDL_Texture 类型是库的一部分,所以我认为我不能这样做。如果我错了,请纠正我。
  • @idtownie:我猜您可以包含相应的头文件,但该类型不支持复制。很久没用 SDL 了,感觉贴图没法复制。
【解决方案2】:

我想我找到了解决办法。它并不是完全复制指针,而是我所做的是,因为我使用的是 SDL2,所以我将渲染目标更改为this->texture,然后使用SDL_RenderCopy() 将原始纹理放在新的纹理上。不幸的是,这是我找到的最简单的解决方案。

【讨论】:

    猜你喜欢
    • 2016-12-07
    • 2015-10-09
    • 1970-01-01
    • 2017-01-08
    • 2020-04-30
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多