es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Miembros de estructuras heredadas inaccesibles durante la inicialización de agregados.

#include <vector>
#include <string>

struct BasePluginInfo
{
    bool bHasGui, bIsSynth;
    char cType;
    std::string sCategory, sSdkVersion, sVendor, sVersion;
};

struct PluginClassInfo
{
    std::string sName, sUid;
    std::vector<std::string> vsParamNames;
};

struct ShellPluginInfo : BasePluginInfo
{
    std::vector<pluginclassinfo> vciClasses;
};

Cuando hago

int main() {
    ShellPluginInfo
    {
        .bHasGui = true
    };
}

El compilador se queja de que ShellPluginInfo no tiene el campo ‘bHasGui’.

Sin embargo, esto funciona:

cpp
int main() {
ShellPluginInfo info;
info.bHasGui = true;
}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Esto se debe a que el primer ejemplo está utilizando inicialización de agregados con un inicializador designado (.) para inicializar el campo bHasGui. Sin embargo, dado que ShellPluginInfo se deriva de BasePluginInfo, se considera una clase de agregado y todos sus miembros deben inicializarse en el orden de declaración en la definición de la clase. Por lo tanto, la forma correcta de inicializar bHasGui es creando una instancia de ShellPluginInfo y asignando el valor posteriormente, como se muestra en el segundo ejemplo.

Comments are closed.