Pergunta

Alguém sabe como fazer com que o IntelliSense funcione de maneira confiável ao trabalhar em projetos C/C++?Parece funcionar para cerca de 1 em cada 10 arquivos.O Visual Studio 2005 parece ser muito melhor que 2008.

Editar:Embora não seja necessariamente uma solução, a solução alternativa fornecida aqui:

Como fazer com que o IntelliSense funcione de maneira confiável no Visual Studio 2008

É provavelmente a melhor aposta se eu quiser um sistema IntelliSense decente.

Foi útil?

Solução

Também percebi que o Intellisense às vezes está 'perdido', em algum grande projeto.Por que?Nenhuma idéia.

É por isso que compramos Assistência Visual (de Software tomate) e desativou o Intellisense excluindo a dll feacp.dll no subdiretório do Visual Studio (C:\Program Files\Microsoft Visual Studio 8\VC\vcpackages)

Esta não é uma solução, apenas uma solução alternativa.

Outras dicas

O intellisense nativo do C++ não funciona de maneira confiável em nenhuma versão do Visual Studio.Acho que há dois problemas comuns:

1) Os caminhos dos arquivos de cabeçalho não estão configurados corretamente.Ao encontrar um tipo em que o intellisense não está funcionando, use o IDE para clicar em cada arquivo de cabeçalho para encontrar aquele que contém o tipo.(Clique com o botão direito em #include e selecione Abrir Documento...).Se isso falhar antes de você chegar ao arquivo que declara o tipo, o problema é seu.Certifique-se de que os caminhos de pesquisa do arquivo de cabeçalho estejam configurados corretamente.

E,

2) O banco de dados intellisense está corrompido.Isso acontece o tempo todo.Você precisa fechar a solução, excluir o arquivo .ncb e reabrir a solução.Postei a macro que uso para isso em resposta a outra pergunta aqui.


O pré-processador também pode confundir o intellisense - portanto, certifique-se de que quaisquer #defines durante a construção também estejam disponíveis para o intellisense.Fora isso, não sei o que mais pode quebrá-lo.Não vi nenhum problema específico com declarações futuras.

Parece que há esperança no horizonte para aqueles de nós que não conseguem obter o Visual Assist:

Reconstruindo o Intellisense

Você tem algum complemento instalado (ou desinstalado)?Acho que isso afeta meu intellisense.

Além disso, certifique-se de que Ferramentas-> Opções-> Editor de Texto-> Todos os Idiomas "Auto List Members" e "Parameter Information" estejam marcados.

Eu não uso VS2008 para C++, apenas VB e C#, mas acho que quando o intellisense para de funcionar (verdadeiro para VS2003/2005/2008) é porque algo no projeto/arquivo está quebrado - geralmente uma referência ou código incorreto.

VB e C# têm suporte intellisense muito melhor devido à capacidade de refletir sobre os assemblies referenciados para construir a árvore intellisense.

C++ precisa percorrer os arquivos de inclusão para protótipos de função e, se os caminhos não estiverem corretos, ele não encontrará todos os cabeçalhos de protótipo.

Minha correção para o itellisense foi necessária depois que aquele terrível utilitário de refatoração mediu meu código.O problema era um arquivo de cabeçalho de classe que incluía um #include de si mesmo.A referência recursiva destrói o itellisense.Um sintoma disso é se o itellisense consegue ver outras classes, mas não a atual.Também:

Use #pragma uma vez para eliminar carregamentos de cabeçalho duplicados

Se o projeto agora demorar muito mais para carregar, é uma questão de tentar entender o conflito que está causando a falta de suporte para conclusão.

Freqüentemente, apenas um objeto de classe é afetado. Isso mostra quais arquivos (geralmente cabeçalhos) devem ser observados.

@John Richardson / @Jonathan Holanda

Minhas inclusões estão configuradas corretamente, sem problemas.Também tentei reconstruir o NCB várias vezes, mas nunca resolveu 100%.

Tenho a sensação de que isso pode ter a ver com declarações futuras de classes.por exemplo.para reduzir a complexidade das inclusões nos arquivos de cabeçalho, normalmente fazemos algo como:

class MyPredeclared;

class SomeOtherClass
{
private:
    MyPredeclared* m_pPointer;
}

Eu me pergunto se isso estraga tudo?Alguma outra ideia?Definitivamente fica pior quanto maior o seu projeto se torna.

Tive um problema muito chato, o intellisense estava funcionando apenas em alguns arquivos, sem nenhum motivo evidente...levei algumas horas pesquisando no Google, mas finalmente entendi que o motivo era de fato uma referência recursiva!Eu estava usando o:

#ifndef CLASS_H
#define CLASS_H
...
#endif

para evitar a redefinição de símbolos, e isso às vezes quebra o intellisense em grandes projetos.

Mas basta comentar o ifndef-define-endif e colocar um:

#pragma once 

no início dos arquivos de cabeçalho para evitar redefinições e fazer o Intellisense funcionar novamente =)=)

Pelo menos funcionou para mim, espero que seja útil ...

Cheers Francesco

Estudei recentemente o Intellisense no VS2008, pois estou desenvolvendo uma biblioteca bastante grande de álgebra linear numérica em C++, onde modelos e outros são usados ​​extensivamente.O Intellisense parou de trabalhar logo no início do projeto e eu meio que desisti, mas agora ficou muito chato sem ele, então comecei a investigar.Isto é o que descobri:

Supondo que haja um(s) arquivo(s) contendo código que "quebra" o Intellisense,

  • se os arquivos de cabeçalho que quebram o Intellisense estão no projeto, mas não estão #included, ainda funciona no restante dos arquivos
  • se eles estiverem incluídos, mas nenhum tipo declarado dentro for usado, ainda funciona
  • se eles forem incluídos e um tipo declarado dentro for usado, ainda poderá funcionar um pouco (sem Intellisense para membros, sem Intellisense após a ocorrência de determinado tipo, mas pelo menos nomes globais e informações de argumentos antes)
  • se o Intellisense estiver quebrado em um arquivo .cpp, ele ainda poderá funcionar nos outros onde o código problemático não for incluído ou usado (mas imagino que se ele travar feio, ele será desabilitado para todo o projeto, embora isso não tenha acontecido com meu)
  • O Intellisense parece ser atualizado após uma compilação bem-sucedida (às vezes não antes)
  • colocando código quebrado dentro de qualquer um #if 0, /* .. */ ou // parece deixar o Intellisense à vontade

Dos recursos C++ que usei, na verdade, apenas alguns quebram o Intellisense:

  • comparação com '>' ou '>=' no parâmetro do modelo (por exemplo static_assert<(size > 0)>)
    • não resolvido usando parênteses duplos (static_assert<((size > 0))> não ajuda)
    • resolvido usando '<' ou '<=' em vez disso (static_assert<0 < size> funciona)
    • resolvido armazenando o valor em enum e usando isso para especializar o modelo
  • a especialização explícita do modelo de função desativa as informações do argumento (por exemplo function<type>(args))
    • provavelmente não consigo resolver (talvez agrupar em uma macro), mas posso conviver com isso quebrado
  • instanciação do tipo de membro do modelo, como Matrix::MakeMatrixType<3, 3>::Result r;
    • é meio difícil descobrir exatamente por que isso acontece (provavelmente por causa do uso do Eigen)
    • solução alternativa movendo esse código em um .cpp separado, onde IS não funcionará (nem sempre é possível)

Parece que alguns desses problemas se devem a alguma análise "simplificada", que é menos forte que um analisador C++ adequado.Com as informações acima em mãos, um método “confiável” de fazer o Intellisense funcionar em um código existente:

  1. Configure um projeto vazio (um aplicativo de console), crie Main.cpp com fictício void main() {} iniciar.
  2. Inclua um dos seus arquivos de cabeçalho quebrados e math.h
  3. Build (deve ser compilado para que o Intellisense seja atualizado de forma confiável)
  4. Teste se o Intellisense está funcionando digitando, por exemplo. sin( e ver se a ajuda do argumento aparece.Às vezes, isso funcionaria, mas a ajuda dos membros não - então tente isso também.
  5. Faça uma instância de algo no arquivo de cabeçalho, construa, veja se consegue matar o IS.
  6. Remova o código do arquivo culpado e vá para a etapa 3
  7. Depois de encontrar e corrigir o código problemático, coloque de volta o código removido na etapa 5 e tente novamente
  8. Depois de fazer uma aula inteira funcionar bem, faça uma instância da próxima aula, e assim por diante...

Achei fácil identificar locais de código que causavam problemas (sei que isso pode ser inviável para projetos realmente grandes, no meu caso, apenas um único arquivo entre 97 causou problemas).Observe que 'Build' aqui se refere à compilação, o estágio de vinculação não precisa ser concluído, portanto, questões externas não resolvidas estão ok, o IS deve ser atualizado independentemente.

Outro método de atualização do IS (diferente da construção) é salvar tudo, fechar a área de trabalho, excluir o arquivo .ncb e reabri-lo.Então espere por 'Atualizando o Intellisense...(N)' desapareça da barra de status (N conta até zero, se não for até o fim, mostra o progresso onde os problemas ocorreram).Achei isso bastante tedioso.

Sobre este problema notei algo interessante (no Visual Studio 2010):para resolver esse problema eu mudei #include sintaxe em meus arquivos de cabeçalho, antes era (projeto antigo feito com VS 2005 e reaberto usando VS 2010):

#include <myfile.h> 

e eu corrijo isso com:

#include "myfile.h"

Após o intellisense começar a funcionar corretamente!Espero que isso possa ajudar!

tive que redefinir as configurações...

C:\Arquivos de Programas\Microsoft Visual Studio 9.0\Common7\IDE>devenv.exe /ResetSettings

tópico sobre isso aqui

O problema está nos arquivos .vcproj.

Você descobrirá que se mudar para o modo de liberação do modo de depuração, construir e tentar o intellisense, ele geralmente funciona.

Feche o Visual Studio.Se você pesquisar os arquivos .vcproj em seu projeto, edite-os e procure as duas primeiras instâncias de AdicionalIncludeDirectories.O valor para isso deve ser algo como "..\,....\" em vez de "../..".

Reabra seu projeto, deixe o Intellisense terminar de construir, então ele deverá ser consertado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top