gpt4 book ai didi

c++ - 在类中定义公共(public)结构

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

嘿,所以我正在制作一个功能,可以收集您想保留在屏幕上的 Sprite ,并且
然后“检查()”它们以确保它们留下来,否则使它们从屏幕边缘弹起。

我在我的类('Object')中定义了一个结构,它包含对 Sprite 的引用,以及它是否仍在屏幕之外。
(因此在 Sprite 实际返回到屏幕内之前不会再次调用 reflect() 函数)

我对以下代码有三个问题:

  • 在我的 Object 结构中保存对 sprite 的引用是否允许我在调用 reflect() 时获得原始 sprite,而不仅仅是拷贝?

  • 为什么“对象”结构有红色下划线,表示错误:类“OnScreenCheck::Object”的隐式生成的构造函数无法初始化。

  • 在构造函数中,我创建了一个 Object 实例,并将其传递到 Objects vector 中。我会想,因为我将它传递给 vector , vector 会复制它并保存它,但我也想知道在构造函数完成后实例是否会被销毁,搞砸了。会成功吗?

感谢您的帮助!这是仿函数:

class OnScreenCheck
{
public:
struct Object{
mySprite& Sprite;
bool OffScreen;};

void AddObject(mySprite& aSprite){
Object newObject;
newObject.Sprite= aSprite;
newObject.OffScreen= false;
Objects.push_back(newObject);
};

void Check(){
// make sure box1 stays on the screen
for(int I=0; I< Objects.size(); I++){
//sprite has gone to high or to low
bool yColl (Objects[I].Sprite.Side(mySprite::top)>=ScreenHeight
|| Objects[I].Sprite.Side(mySprite::bottom)<=0);
//sprite has gone to far left or right
bool xColl (Objects[I].Sprite.Side(mySprite::left)<=0
|| Objects[I].Sprite.Side(mySprite::right)>ScreenWidth);

if(Objects[I].OffScreen==false){
if(yColl){
Objects[I].OffScreen= true;
Objects[I].Sprite.Reflect(180);}
if(xColl){
Objects[I].OffScreen= true;
Objects[I].Sprite.Reflect(90);}
}
}
};

编辑:另外,我对 struct Object 的意图不是拥有属于 OnScreenCheck 的公共(public)数据类型,而是使数据类型只能由 OnScreenCheck 使用,因为它保存了这些“对象”进入 vector 对象。它只是为了在 OnScreenCheck 中组织数据。我怎样才能做到这一点,这样我就不必立即在 OnScreenCheck 构造函数中初始化对象?

最佳答案

在我的 Object 结构中保存对 sprite 的引用是否允许我在调用 reflect() 时获得原始 sprite,而不仅仅是一个拷贝?

引用需要在创建时初始化,并且它们仍然绑定(bind)到它们作为别名的类型对象,因此保存对 sprite 的引用将始终指向相同的 sprite 对象,任何试图让它成为其他东西的别名都会导致错误。

为什么“对象”结构有红色下划线,表示 错误:类“OnScreenCheck::Object”的隐式生成构造函数无法初始化。

您需要为 OnScreenCheck 提供一个构造函数,它将适本地初始化 Object 成员,尤其是对 sprite 的引用成员。该错误特别是因为引用必须在创建时进行初始化。

在构造函数中,我创建了一个 Object 实例,并将其传递到 Objects vector 中。我会想,因为我将它传递给 vector , vector 会复制它并保存它,但我也想知道在构造函数完成后实例是否会被销毁,搞砸了。它会起作用吗?

vector 将保存对象的拷贝并且不会被销毁,除非您通过 vector 函数明确要求 vector 这样做,除非您的对象具有某些指针类型。

关于c++ - 在类中定义公共(public)结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6401460/

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