C++ 动态定位C+中的图像数组+;建设者

C++ 动态定位C+中的图像数组+;建设者,c++,c++builder,C++,C++builder,我想玩21点游戏 我想做一个向量的图像,当我按下一个按钮,一个新的图像显示(需要2或3个图像) 在那之后,我想在另一次按下按钮时删除它们 我尝试在main类(Unit1.h)中声明一个向量: 在表格1(Unit1.cpp)中: 在这里我想删除它们: void __fastcall TForm1::Button3Click(TObject *Sender) { for(int k=1;k<=i;i++) { Images[k]->~TImage(); //

我想玩21点游戏

我想做一个向量的图像,当我按下一个按钮,一个新的图像显示(需要2或3个图像)

在那之后,我想在另一次按下按钮时删除它们

我尝试在main类(Unit1.h)中声明一个向量:

在表格1(Unit1.cpp)中:

在这里我想删除它们:

void __fastcall TForm1::Button3Click(TObject *Sender)
{
    for(int k=1;k<=i;i++) {
        Images[k]->~TImage();   //delete Images[k];
    }
}
void\uu fastcall TForm1::Button3Click(TObject*Sender)
{
for(int k=1;k~TImage();//删除图像[k];
}
}

<代码> > p>您没有声明vector。是C++中的实际类类型。实际上声明的是一个未知大小的静态数组。不能这样做。必须在编译时指定大小的常数(如:

)。
class TForm1 : public TForm
{
...
public:
    TImage* Images[3];
};
如果您不知道编译时的图像数,则必须声明一个指针,指向在运行时动态分配的数组:

class TForm1 : public TForm
{
...
public:
    TImage** Images;
    int TotalNumberOfImages;
    int NumberOfImages;

    __fastcall TForm1(TComponent *Owner);
    __fastcall ~TForm1();
};

void\uu fastcall TForm1::Button1Click(TObject*Sender)
{
TImage*img=新TImage(本);
img->Parent=this;
图像->图片->。。。
...
图像。推回(img);
}
void\uu fastcall TForm1::Button3Click(TObject*发送方)
{
对于(int k=0;k
或者,如果您使用的是Embarcadero基于Clang的C++11编译器之一:

#include <vector>
#include <memory>

class TForm1 : public TForm
{
...
public:
    std::vector<std::unique_ptr<TImage*>> Images;
};
#包括
#包括
类TForm1:公共TForm
{
...
公众:
矢量图像;
};

void\uu fastcall TForm1::Button1Click(TObject*Sender)
{
标准:唯一的(新时代(本));
img->Parent=this;
图像->图片->。。。
...
图像。推回(img);
}
void\uu fastcall TForm1::Button3Click(TObject*发送方)
{
图像。清除();
}

a)我看不到向量的用法,b)为什么在这里显式调用析构函数
Images[k]->~TImage()
?C),C++数组索引从0开始,而不是1。是的,我没有向量,我想删除这些图像,这是一个析构函数的方法?我看到它与delete一起工作,但不显式调用析构函数。非常感谢,这对我很有帮助
class TForm1 : public TForm
{
...
public:
    TImage* Images[3];
};
class TForm1 : public TForm
{
...
public:
    TImage** Images;
    int TotalNumberOfImages;
    int NumberOfImages;

    __fastcall TForm1(TComponent *Owner);
    __fastcall ~TForm1();
};
__fastcall TForm1::TForm1(TComponent *Owner)
: TForm(Owner)
{
    TotalNumberOfImages = ...;
    Images = new TImage*[TotalNumberOfImages];
    NumberOfImages = 0;
}
__fastcall TForm1::~TForm1()
{
    delete[] Images;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    if (NumberOfImages < TotalNumberOfImage)
    {
        TImage *img = new TImage(this);
        img->Parent = this;
        img->Picture->...
        ...
        Images[NumberOfImages++] = img;
    }
}

void __fastcall TForm1::Button3Click(TObject *Sender)
{
    for(int k = 0; k < NumberOfImages; ++k)
        delete Images[k];
    NumberOfImages = 0;
}
#include <vector>

class TForm1 : public TForm
{
...
public:
    std::vector<TImage*> Images;
};
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TImage *img = new TImage(this);
    img->Parent = this;
    img->Picture->...
    ...
    Images.push_back(img);
}

void __fastcall TForm1::Button3Click(TObject *Sender)
{
    for(int k = 0; k < Images.size(); ++k)
        delete Images[k];
    /*
    or:
    for(std::vector<TImage*>::iterator iter = Images.begin(), end = Images.end(); iter != end; ++iter)
        delete *iter;
    */

    Images.clear();
}
#include <vector>
#include <memory>

class TForm1 : public TForm
{
...
public:
    std::vector<std::unique_ptr<TImage*>> Images;
};
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    std::unique_ptr<TImage> img(new TImage(this));
    img->Parent = this;
    img->Picture->...
    ...
    Images.push_back(img);
}

void __fastcall TForm1::Button3Click(TObject *Sender)
{
    Images.clear();
}