Aviso do compilador C5243

'type': o uso da classe incompleta 'class-name' pode causar violação de ODR devido à limitação da ABI. Você pode solucionar o problema especificando a palavra-chave de herança na declaração de encaminhamento da classe.

Comentários

A ABI do Microsoft C++ usa mais de um tipo de ponteiro para membro. Esses tipos têm tamanhos diferentes que dependem do modelo de herança usado pela classe. O padrão C++ permite que você declare um ponteiro para membro de um tipo de classe incompleto. Se você declarar uma variável de tipo ponteiro para membro para uma classe incompleta, o compilador deverá usar a representação mais geral. Isso pode levar a uma regra de definição única ou violação de ODR, pois o compilador pode usar uma representação menor e mais específica para esse tipo de ponteiro para membro em outras unidades de tradução em que o tipo de classe completo está disponível.

Para resolver esse erro, você pode especificar o tipo de classe completo antes de declarar a variável ponteiro para membro. Ou então use uma palavra-chave de herança específica da Microsoft para especificar o modelo de herança correto na declaração de classe de encaminhamento incompleta.

O aviso do compilador C5243 é novo no Visual Studio 2019 versão 16.10 e está desativado por padrão. Para obter mais informações sobre como habilitar esse aviso, confira Avisos do compilador desativados por padrão.

Confira também

Palavras-chave de herança