Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A classe sem nome usada no nome typedef não pode declarar membros que não sejam membros de dados não estáticos, enumerações de membros ou classes de membros
Observações
As classes sem nome dentro de uma typedef declaração não podem ter outros membros além de:
- membros de dados não estáticos sem inicializadores de membros padrão,
- classes de membros, ou
- enumerações de membros.
As mesmas restrições são aplicadas recursivamente a cada classe aninhada. A restrição destina-se a garantir a simplicidade das estruturas que têm typedef nomes para fins de ligação. Eles devem ser simples o suficiente para que nenhum cálculo de vinculação seja necessário antes que o compilador chegue ao typedef nome para vinculação.
Este aviso é novo no Visual Studio 2019 versão 16.6. Com base em P1766R1 adotado pelo comitê de padrões C++ como um relatório de defeitos, ele afeta todos os modos de padrões do compilador. No padrão /std:c++14 e /std:c++17 modos, o compilador emite aviso C5208 para código não conforme. Se /permissive- for especificado, o compilador emite o aviso C5208 como um erro em /std:c++14. O compilador emite o erro C7626 para código não conforme quando /std:c++17 ou posterior é especificado.
Para desativar o aviso sem alterações de código
Você pode desativar o aviso para uma linha de código específica usando o warning pragma, #pragma warning(suppress : 5208). Você também pode desativar o aviso dentro de um arquivo usando o pragma de aviso, #pragma warning(disable : 5208). Você pode desativar o aviso globalmente em compilações de linha de comando usando a opção de linha de comando /wd5208 .
Para desativar o aviso para um projeto inteiro no IDE do Visual Studio:
- Abra a caixa de diálogo Páginas de propriedades do seu projeto. Para obter informações sobre como usar a caixa de diálogo Páginas de propriedades, consulte Páginas de propriedades.
- Selecione a página Propriedades> de configuraçãoC/C++>Advanced.
-
Edite a propriedade Desativar avisos específicos para adicionar
5208. Escolha OK para aplicar as alterações.
Example
O exemplo a seguir mostra as construções que não são mais permitidas em estruturas sem nome. Dependendo do modo de padrões especificado, erros ou avisos C5208 ou C7626 são emitidos:
struct Base { };
typedef struct : Base // inheriting from 'Base'; ill-formed
{
void fn(); // ill-formed
static int i; // ill-formed
struct U {
void f(); // nested class has non-data member; ill-formed
};
int j = 10; // default member initializer; ill-formed
} S;
O código acima pode ser corrigido dando um nome à classe sem nome:
struct Base { };
typedef struct NamedType : Base
{
void fn();
static int i;
struct U {
void f();
};
int j = 10;
} S;