Erro C ++ Erro incompleto Tipo não permitido

Erro C ++ Erro incompleto Tipo não permitido
Neste guia, discutiremos outro erro que ocorre durante a programação ou codificação na linguagem C ++. Este erro é "tipo incompleto não é permitido". Discutiremos por que esse erro ocorre e as razões por trás disso. Como este é um bug de tempo de compilação, ocorre pouco antes da execução do código. Também descobriremos a solução para o erro e resolveremos.

Na linguagem C ++, os arquivos de cabeçalho são muito importantes. Se estivermos usando algumas palavras-chave ou métodos internos de C ++, devemos ter que adicionar seus respectivos arquivos de cabeçalho em nosso código, caso contrário, o compilador nos dará o erro. Agora, para entender melhor o erro, primeiro, discutiremos quais são os arquivos do cabeçalho e qual é o seu propósito. Os arquivos de cabeçalho estão incluídos na parte superior do código.

Os arquivos de cabeçalho são como bibliotecas de importação, que importamos, para usar suas funcionalidades. Esses arquivos às vezes atuam como arquivos de classe que têm funções diferentes. Os arquivos de cabeçalho são necessários para adicionar para usá -los. Se tentarmos usar essas funções diretamente e não importarmos os arquivos de cabeçalho, obtemos esse erro. Este erro também ocorre quando o compilador detecta qualquer identificador desconhecido que tenha um tipo de dados conhecido, mas não possui uma definição conhecida. Às vezes, esse erro também ocorre se você estiver usando um IDE desatualizado ou compilador.

Este erro ocorre em diferentes tipos que são os seguintes:

  1. Tipo incompleto não é permitido
  2. Fream Tipo incompleto não é permitido
  3. ifstream Tipo incompleto não é permitido

Sintaxe:

Esta não é uma função ou biblioteca interna. Estamos discutindo que é um erro e como todos sabemos que um erro não tem uma sintaxe específica. Esta é a mensagem de que o compilador retorna quando recebemos nosso erro.

Erro: Campo 'Parent' tem tipo incompleto 'a'

Observe que na mensagem de erro acima, as palavras -chave 'pai' e 'a' não são estáticas. Eles continuam mudando dependendo do seu código. Essa coisa será entendida depois de executar os exemplos.

Exemplo # 01:

Para entender melhor o nosso erro, agora realizaremos um exemplo para obter o erro. Depois disso, vamos resolver o erro. Para fazer isso, declaramos uma aula com o nome de "TestClass". Em nossa classe na seção Modificador de Acesso Público, criamos um objeto de nossa classe com o nome de "pai".

Depois disso, criamos um ponteiro da nossa classe que está apontando para o ponteiro do objeto de nossa classe. Não estamos fazendo mais nada, nem chamamos nada no método principal () ou executando qualquer operação. Este é o exemplo mais simples que tentamos executar para fazer você entender. Agora, executaremos nosso código para ver os resultados.

#incluir
usando namespace std;
Classe testclass

público:
Pai de testclass; /*Para resolver o erro: testclass*pai;*/
Testclass (testclass *ptr): pai ( *ptr)


;
int main ()

Na compilação do nosso código, o sistema lançou o erro e não o compilou com sucesso. Para descobrir o motivo desse erro, vejamos a mensagem de erro. A mensagem de erro diz “campo 'pai' tem tipo incompleto 'testclass'“. Este é o mesmo erro que estamos discutindo que é um tipo incompleto que não é permitido. Portanto, o sistema mostrou esse erro porque temos um tipo incompleto que sabemos que agora não é permitido. Agora, vamos resolver nosso erro.

Para resolver nosso erro, não fizemos nada extra. Acabamos de substituir o objeto de testclass de um objeto simples para um ponteiro. Agora vamos executar nosso código modificado para observar como funciona.

Desta vez, nosso código foi executado com sucesso sem causar nenhum erro. Não realizamos nenhuma operação em nosso código, por isso possui uma saída em branco. A causa do erro foi que estávamos tentando criar uma instância do objeto de uma classe que não é possível porque já o usamos no construtor. Nesse caso, o compilador chama o código recursivamente e se torna infinito, por isso não é possível.

Exemplo # 02:

Já discutimos em nossa parte de introdução que esse erro pode ser causado devido a vários motivos. Nosso objetivo aqui é discutir o maior número possível de motivos. Então, para alcançar nosso objetivo, realizamos outro exemplo simples para fazer você entender o erro. Para executar este exemplo, não criamos nenhuma classe, estrutura ou função, ou qualquer coisa. Simplesmente chamamos o StringStream, que é usado para operar com seqüências como calcular o número de palavras etc.

#incluir
usando namespace std;
int main ()

std :: stringstream obj;
retornar 0;

Este é o erro que receberemos após a execução do nosso código, o que significa que desta vez, também, o código não foi capaz de compilar com sucesso. A mensagem de erro diz que o agregado std :: stringStream "obj" tem um tipo incompleto e não pode ser definido. Então, aqui, a mensagem de erro é um pouco diferente da anterior. Mas o ponto aqui é o mesmo: que é um "tipo incompleto". Mas por que esse problema aconteceu desta vez quando não utilizamos uma aula? Vamos tentar eliminar o erro e, ao fazer isso, descobriremos o motivo de sua ocorrência também.

Discutimos anteriormente que esse erro também ocorre se o arquivo de cabeçalho estiver ausente em nosso código. Então, vamos adicionar um arquivo de cabeçalho que é 'sStream' e ver o que acontece. Vamos executar nosso código.

Desta vez, o código é executado com sucesso. O motivo do erro foi que estávamos usando a função do StringStream, mas não estávamos adicionando sua biblioteca na seção de arquivos de cabeçalho. Depois de adicionar seu arquivo de cabeçalho, o código foi executado com sucesso.

Conclusão

Neste guia, discutimos um erro que ocorre durante a codificação na linguagem C ++: esse erro é 'tipo incompleto'. Discutimos a causa do erro e as maneiras de eliminar este erro. Também realizamos exemplos de lidar com diferentes cenários para fazer você entender o erro. Por fim, resumiremos o artigo inteiro dizendo que você deve garantir algumas coisas para evitar obter esses erros. Essas poucas coisas são que devemos verificar se incluímos todos os arquivos de cabeçalho necessários em nosso código ou não. Verifique se os tipos de dados dos objetos estão corretos ou não. Na maioria dos casos, estamos usando objetos simples, mas nosso código exige o uso de ponteiros. Se estivermos fazendo uma declaração a seguir de qualquer estrutura ou classe em nosso código, precisamos verificar se a definição dessa classe ou estrutura está disponível em nosso código ou não.