vnořené struct s polem

hlasů
0

Prosím, pomozte mi vytvořit vnořené struct s řadou. Jak mohu opravit tento kód?

class CMain
{
    public:
        CMain();
        ~CMain();

    private:
        struct
        {
            CCheckSum() : BufferSize(500) {memset(Buffer, 0, BufferSize);}
            const int BufferSize;
            char Buffer[BufferSize];
        }SmallBuffer;
}

Dík.

Položena 28/07/2009 v 14:26
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
1

Statická elektřina sady potřebujeme znát jejich délky v době kompilace, nebo budete muset dynamicky přidělit paměť:

struct CCheckSum
{
    CCheckSum()
    : BufferSize(500),
      Buffer(new char[BufferSize])
    {
        memset(Buffer, 0, BufferSize);
    }
    ~CCheckSum() { delete[] Buffer; } // Note the use of delete[]!
    const int BufferSize;
    char* Buffer;
}SmallBuffer;

Vy jste pravděpodobně lépe s použitím std :: vector i když:

struct CCheckSum
{
    CCheckSum() : Buffer(500, 0) {}
    std::vector<char> Buffer;  // A std::vector keeps
                               // track of its size enternally
}SmallBuffer;
Odpovězeno 28/07/2009 v 14:28
zdroj uživatelem

hlasů
0

Není problém ve vztahu k hnízdění.

Pole mají konstantní velikost. Buď aby BUFFERSIZE konstantní nebo použít std :: vektoru namísto char [].

Odpovězeno 28/07/2009 v 14:28
zdroj uživatelem

hlasů
0

velikost pole nelze měnit za běhu. To by mělo být známo, na samotnou kompilaci. Můžete použít std :: vector pro tento případ užití. Také název struct by měla být před zápisem konstruktor s názvem CCheckSum.

struct CCheckSum
        {
            CCheckSum() : ....
Odpovězeno 28/07/2009 v 14:32
zdroj uživatelem

hlasů
2

I když jste prohlásil, BufferSizeas const, v rámci třídy to není deklarovat konstantu v době kompilace, která je potřebná pro deklaraci velikosti pole v jazyce C ++, ale konstantní datový člen, který poté, co nastavit v konstruktoru, nemůže být změněn již po celou dobu životnosti instance (ale může ještě být různé pro každou instanci).

Dvě řešení: Zkontrolujte,

  1. BufferSize static const v rámci třídy, nebo
  2. (jen) constv namespace rozsahu (včetně globálním měřítku).
Odpovězeno 28/07/2009 v 14:42
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more