working visual studio not code autocompletar activar c++ c visual-studio-2008 intellisense

c++ - not - intellisense visual studio code



Cómo hacer que IntelliSense funcione de manera confiable en Visual Studio 2008 (12)

¿Alguien sabe cómo hacer que IntelliSense funcione de manera confiable cuando se trabaja en proyectos C / C ++? Parece que funciona para aproximadamente 1 en 10 archivos. Visual Studio 2005 parece ser mucho mejor que 2008.

Editar: Aunque no necesariamente es una solución, la solución alternativa se proporciona aquí:

Cómo hacer que IntelliSense funcione de manera confiable en Visual Studio 2008

Es probablemente la mejor opción si quiero un sistema IntelliSense decente.


No uso VS2008 para C ++, solo VB & C #, pero me parece que cuando intellisense deja de funcionar (cierto para VS2003 / 2005/2008) es porque algo en el proyecto / archivo está roto, generalmente una mala referencia o código.

VB y C # tienen mucho mejor soporte intellisense debido a la capacidad de reflejar en los ensamblados a los que se hace referencia para construir el árbol intellisense.

C ++ tiene que recorrer los archivos de inclusión para prototipos de funciones, y si las rutas no son correctas, no encontrará todos los encabezados de los prototipos.


¿Tiene algún complemento instalado (o desinstalado)? Encuentro eso efectos mi intellisense.

Además de eso, solo asegúrate de que tus Herramientas-> Opciones-> Editor de texto-> Todos los idiomas "Miembros de la lista automática" e "Información de parámetros" estén marcados.


@ John Richardson / @ Jonathan Holland

Mis includes están configurados correctamente, no hay problemas allí. También probé la reconstrucción de NCB varias veces, pero nunca la soluciona al 100%.

Tengo la sensación de que puede estar relacionado con las declaraciones de las clases. por ejemplo, para reducir la complejidad de las inclusiones en los archivos de encabezado, normalmente hacemos algo como:

class MyPredeclared; class SomeOtherClass { private: MyPredeclared* m_pPointer; }

Me pregunto si eso lo arruina. ¿Alguna otra idea? Definitivamente empeora cuanto más grande sea tu proyecto.


El problema es con los archivos .vcproj.

Encontrará que si cambia al modo de liberación del modo de depuración, compila y luego prueba intellisense, a menudo funciona.

Cierre Visual Studio. Si busca los archivos .vcproj en su proyecto, edítelos y busque las dos primeras instancias de AdditionalIncludeDirectories. El valor para esto debería ser algo así como ".. /, .... /" en lugar de "../ ..".

Vuelva a abrir su proyecto, deje que el Intellisense termine de construir, entonces debería ser reparado.


Mi corrección de itellisense fue necesaria después de que esa horrible utilidad de refactor minó mi código. El problema era un archivo de encabezado de clase que incluía un #include de sí mismo. La referencia recursiva destruye itellisense. Un síntoma de esto es si itellisense puede ver otras clases pero no la actual. También:

Use #pragma una vez para eliminar cargas de encabezado duplicadas

Si el proyecto ahora tarda mucho más tiempo en cargarse, es necesario tratar de dar sentido al conflicto que está causando la falta de soporte de finalización.

A menudo, solo se ve afectado un objeto de clase. Esto le muestra qué archivos (generalmente encabezados) debe ver.


Native C ++ intellisense no funciona de manera confiable en ninguna versión de Visual Studio. Encuentro que hay dos problemas comunes:

1) Las rutas de los archivos de encabezado no están configuradas correctamente. Cuando encuentre un tipo donde intellisense no funciona, use el IDE para hacer clic a través de cada archivo de encabezado para encontrar el que contiene el tipo. (Haga clic derecho en #include y seleccione Abrir documento ...). Si esto falla antes de llegar al archivo que declara el tipo, este es su problema. Asegúrese de que las rutas de búsqueda del archivo de encabezado estén configuradas correctamente.

Y,

2) La base de datos intellisense está corrupta. Esto sucede todo el tiempo. Debe cerrar la solución, eliminar el archivo .ncb y luego volver a abrir la solución. Publiqué la macro que uso para esto en respuesta a otra pregunta aquí .

El preprocesador también puede confundir intellisense, así que asegúrese de que #defines durante la compilación también estén disponibles para intellisense. Aparte de eso, no sé qué más puede romperlo. No he visto ningún problema en particular con declaraciones directas.



Recientemente estudié Intellisense en VS2008, ya que estoy desarrollando una biblioteca de álgebra lineal numérica en C ++ bastante grande, donde las plantillas y demás se usan ampliamente. Intellisense dejó de funcionar en breve en el proyecto y en cierto modo me rendí, pero ahora se volvió realmente molesto sin él, así que me puse a investigar. Esto es lo que descubrí:

Suponiendo que hay un archivo (s), que contiene el código que "rompe" Intellisense,

  • si los archivos de encabezado que rompen Intellisense están en el proyecto, pero no son #include d, aún funcionan en el resto de los archivos
  • si están incluidos, pero no se usa ningún tipo declarado dentro, todavía funciona
  • si se incluyen y se usa un tipo declarado en el interior, aún podría funcionar un poco (sin Intellisense para miembros, sin Intellisense después de la aparición del tipo dado, pero al menos nombres globales e información de argumento antes)
  • si Intellisense está roto en un archivo .cpp, todavía puede funcionar en los otros donde el código problemático no se incluye ni se usa (pero me imagino que si se cuelga mal, se desactivará para todo el proyecto, aunque eso no sucedió). yo)
  • Intellisense parece ser actualizado después de una compilación exitosa (a veces no antes)
  • poner código roto dentro de #if 0 , /* .. */ o // parece poner a Intellisense a gusto

De las características de C ++ que utilicé, en realidad solo unas pocas descifran Intellisense:

  • comparación con ''>'' o ''> ='' en el parámetro de plantilla (p static_assert<(size > 0)> ej. static_assert<(size > 0)> )
    • no resuelto mediante el uso de doble paréntesis ( static_assert<((size > 0))> no ayuda)
    • resuelto al usar ''<'' o ''<='' en su lugar ( static_assert<0 < size> funciona)
    • resuelto almacenando el valor en enum y usándolo para especializar la plantilla
  • la especialización explícita de la plantilla de función deshabilita la información del argumento (por ejemplo, function<type>(args) )
    • Probablemente no pueda resolverlo (tal vez envolverlo en una macro), pero puedo soportar que se rompa
  • creación de instancias del tipo de miembro de plantilla, como Matrix::MakeMatrixType<3, 3>::Result r;
    • algo difícil de entender exactamente por qué sucede esto (probablemente debido al uso de Eigen)
    • solución alternativa moviendo dicho código en un .cpp separado donde IS no funcionará (no siempre es posible)

Parecería que algunos de esos problemas se deben a un análisis "simplificado", que es menos sólido que un analizador de C ++ adecuado. Con la información anterior a mano, un método "confiable" para hacer que Intellisense funcione en un código existente:

  1. Configure un proyecto vacío (una aplicación de consola), cree Main.cpp con dummy void main() {} en él.
  2. Incluye uno de tus archivos de encabezado rotos y math.h
  3. Build (debe compilar, para que Intellisense se actualice de forma confiable)
  4. Compruebe si Intellisense funciona escribiendo, por ejemplo, sin( y viendo si aparece la ayuda del argumento. A veces, esto funcionaría, pero la ayuda del miembro no, así que intente eso también.
  5. Haga una instancia de algo en el archivo de encabezado, compile, vea si eso logra matar a IS.
  6. Elimine el código del archivo culpable y vaya al paso 3
  7. Después de encontrar y corregir el código problemático, vuelva a colocar el código eliminado en el paso 5, intente de nuevo
  8. Después de hacer que toda una clase funcione bien, haga una instancia de la siguiente clase, y así sucesivamente ...

Encontré fácil esta manera de identificar las ubicaciones de código que causaban problemas (me doy cuenta de que esto podría ser inviable para proyectos realmente grandes, en mi caso solo un archivo de 97 problemas). Tenga en cuenta que ''Build'' aquí se refiere a la compilación, la etapa de enlace no necesita finalizar, por lo que los elementos externos no resueltos están bien, el IS debería actualizarse independientemente.

Otro método para actualizar IS (aparte de construir) es guardar todo, cerrar el área de trabajo, eliminar el archivo .ncb y volver a abrirlo. Luego espere a que ''Actualizando Intellisense ... (N)'' desaparezca de la barra de estado (N cuenta hacia cero, si no va bien, muestra el progreso donde ocurrieron los problemas). Encontré esto bastante tedioso.


Sobre este problema he notado algo interesante (en Visual Studio 2010): para resolver este problema he cambiado #include sintax en mis archivos de encabezado, antes era (proyecto anterior hecho con VS 2005 y reabierto usando VS 2010):

#include <myfile.h>

y arreglo esto con:

#include "myfile.h"

¡Después de que intellisense comience a funcionar correctamente! ¡Espero que esto pueda ayudar!


También me he dado cuenta de que Intellisense está alguna vez ''perdido'' en algún gran proyecto. ¿Por qué? Ni idea.

Es por eso que hemos comprado Visual Assist (del software Tomato ) y deshabilitado Intellisense al eliminar dll feacp.dll en el subdirectorio de Visual Studio (C: / Archivos de programa / Microsoft Visual Studio 8 / VC / vcpackages)

Esta no es una solución, solo una solución.


Tuve que restablecer la configuración ...

C: / Archivos de programa / Microsoft Visual Studio 9.0 / Common7 / IDE> devenv.exe / ResetSettings

hilo en esto aquí


Tuve un problema muy molesto, intellisense estaba trabajando solo en algunos archivos, sin ninguna razón evidente ... me llevó un par de horas buscar en Google, ¡pero finalmente entendí que la razón era de hecho una referencia recursiva! Estaba usando el:

#ifndef CLASS_H #define CLASS_H ... #endif

para evitar la redefinición de símbolos, y esto a veces rompe intellisense en grandes proyectos.

Pero basta con comentar el ifndef-define-endif y poner un:

#pragma once

al comienzo de los archivos de encabezado para evitar redefiniciones y hacer que Intellisense vuelva a funcionar =) =)

Al menos, esto funcionó para mí, espero que sea útil ...

Saludos, Francesco