Question

S'il vous plaît, aidez-moi à créer un struct imbriqué avec un tableau. Comment puis-je résoudre ce code?

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

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

Merci.

Était-ce utile?

La solution

tableaux statiques doivent connaître leur longueur au moment de la compilation, ou si vous devez allouer dynamiquement la mémoire:

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;

Vous êtes probablement mieux en utilisant std :: vecteur si:

struct CCheckSum
{
    CCheckSum() : Buffer(500, 0) {}
    std::vector<char> Buffer;  // A std::vector keeps
                               // track of its size enternally
}SmallBuffer;

Autres conseils

Même si vous avez déclaré BufferSize comme const, à portée de la classe ce ne déclare pas une constante de compilation, qui est nécessaire pour déclarer la taille des tableaux en C ++, mais un membre constant de données, qui, une fois mis dans le constructeur, ne peut pas être changé plus pour la durée de vie de l'instance (mais peut encore être différent pour chaque instance).

Deux solutions: Faire

  1. BufferSize static const à portée de la classe, ou
  2. (juste) const à périmètre d'espace de noms (y compris la portée mondiale).

Il n'y a pas de problème lié à l'imbrication.

Les tableaux ont une taille constante. Soit faire constante BufferSize ou utiliser un std :: vecteur au lieu d'un char [].

Taille de tableau ne peut pas être modifié au moment de l'exécution. Il faut savoir au moment de la compilation elle-même. Vous pouvez utiliser std :: vecteur pour ce cas d'utilisation. En outre, le nom de struct doit être donné avant d'écrire le constructeur avec le nom CCheckSum.

struct CCheckSum
        {
            CCheckSum() : ....
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top