¿Alguien sabe cómo conseguir IntelliSense para funcionar de forma fiable cuando se trabaja en proyectos C/C++? Parece que funciona durante aproximadamente 1 en 10 archivos. Visual Studio 2005 parece ser mucho mejor que la de 2008.

Edit: Aunque no necesariamente una solución, el trabajo en torno a este tema:

Cómo obtener IntelliSense de forma fiable el trabajo en Visual Studio 2008

Es probablemente la mejor apuesta si quiero un decente IntelliSense sistema.

InformationsquelleAutor Mark Ingram | 2008-09-02

12 Comentarios

  1. 27

    También me he dado cuenta de que Intellisense es en algún momento de ‘perdidos’, en la que algunos de los grandes proyectos. Por qué? Ni idea.

    Esta es la razón por la que hemos comprado Visual Ayudar (de Tomate software) y movilidad Intellisense mediante la eliminación de la dll feacp.dll en el Visual studio subdirectorio (C:\Program Files\Microsoft Visual Studio 8\VC\vcpackages)

    Esta no es una solución, sólo una solución.

    • +1 para saber cómo desactivar el intellisense. La macro que he usado para deshabilitar en 2005 no funciona más que en 2008.
    • He leído en alguna parte que la eliminación de esa dll debe manejarse con cuidado, crear una carpeta con el nombre «nombre solución.bcn» debe ser preferido. Resultados en annyoing mensajes de error en cada inicio, aunque. Y +1 por mencionar VAX.
    • Este está siendo un buen consejo como de VS2010 desde intellisense en VS2010 es muy lento (aunque ahora es posible desactivar intellisense usando la configuración de la página en los VS)
  2. 31

    C++ nativo intellisense no funciona de forma fiable en cualquier versión de Visual Studio. Me parece que hay dos problemas comunes:

    1) archivo de Encabezado de caminos no están configurados correctamente. Cuando usted encuentra un tipo donde intellisense no funciona, usa el IDE para hacer clic a través de cada archivo de encabezado para encontrar el uno que contiene el texto. (Clic derecho sobre #include y seleccione Abrir el Documento…). Si esto falla, antes de llegar a el archivo en la que se declara el tipo entonces este es tu problema. Asegúrese de que el archivo de encabezado de rutas de búsqueda están configurados correctamente.

    Y,

    2) El intellisense de la base de datos está dañada. Esto sucede TODO El tiempo. Usted necesita cerca de la solución, eliminar el .bcn archivo y, a continuación, vuelva a abrir la solución. He publicado la macro que uso para esto en respuesta a otra pregunta aquí.


    El preprocesador puede también confundir intellisense – así que asegúrese de que cualquier #define durante la construcción también están disponibles para intellisense. Aparte de eso, no sé qué otra cosa puede romper. No he visto a ninguno en particular los problemas con declaraciones forward.

    • Eso es una útil solución para eliminar el bcn archivo. 🙂
    • Nota: Intellisense se fija en VS2010.
    • Maldita sea, Microsoft! He 544 #incluye en este proyecto (sin contar el anidado #incluye en ellos y un sinnúmero de #define.) Revisión de su s&^*! Gracias a el cartel de la idea.
    • +1 eliminación de la sdf (VS2010 la nueva extensión de lo que lo fue en bcn ’08), trabajó para mí. Cerré la VS solución, se elimina la solución del SDF archivo, vuelva a abrir la solución, re-construido la solución, y listo.
  3. 4

    ¿Tienes algún add-ins instalados (o desinstalar)? Me parece que los efectos de mi intellisense.

    Además de que simplemente asegurarse de que sus Herramientas->Opciones>Editor de Texto->Todos los Idiomas «Lista de Miembros Automática» y «Parámetro de la Información» está marcada.

    • Gracias, esto me ayudó a entender por qué Intellisense misteriosamente dejó de funcionar!
    • Mi «Todos los Idiomas» configuración mostró cuadrados de color verde en lugar de marcas de verificación (presumiblemente por el que se establece para sólo algunos de los idiomas). Al hacer clic sobre ellos para que se comprueba solucionado el problema para mí.
  4. 2

    Yo no uso VS2008 para C++, sólo VB & C#, pero me parece que cuando intellisense deja de funcionar (lo que sucede con 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 compatibilidad con intellisense debido a la capacidad para reflexionar sobre los ensamblados de referencia para construir el intellisense árbol.

    C++ tiene que caminar los archivos de inclusión para los prototipos de función, y si los caminos no son correctos no va a encontrar todo el prototipo de los encabezados.

  5. 2

    Mi revisión a itellisense se requiere después de ese terrible refactorizar utilidad picada de mi código. El problema era una clase de archivo de encabezado que incluye un #include de sí mismo. La referencia recursiva destruye itellisense. Un síntoma de esto es que si itellisense puede ver en otras clases, pero no de la actual. También:

    Uso #pragma once para eliminar duplicados de encabezado de cargas

    Si el proyecto que ahora se lleva mucho, mucho más tiempo para cargar, que itellisense tratando de hacer sentido de que el conflicto que está causando entonces la falta de finalización de soporte.

    A menudo es sólo un objeto de la clase que se ve afectada, Esto muestra qué archivos (generalmente encabezados) para mirar.

  6. 1

    @John Richardson /@Jonathan Holland

    Mi incluye el programa de instalación correctamente, sin problemas. También he probado el BCN reconstruir varias veces pero nunca lo arregla 100%.

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

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

    Me pregunto si los tornillos de arriba? Cualquier otra idea? Definitivamente empeora cuanto más grande sea el proyecto que se presenta.

  7. 1

    He tenido una muy molesto problema, intellisense estaba trabajando solo en algunos archivos, sin ninguna razón obvia… me tomó un par de horas de la excavación a través de google, pero finalmente comprendí que la razón fue hecho referencia recursiva!
    Yo estaba usando el:

    #ifndef CLASS_H
    #define CLASS_H
    ...
    #endif

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

    Pero es suficiente para comentar la ifndef-definir-endif y poner un:

    #pragma once 

    al principio de los archivos de encabezado para evitar todavía redefiniciones y tener Intellisense a trabajar de nuevo =)=)

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

    Saludos
    Francesco

  8. 1

    Recientemente he estudiado Intellisense en VS2008, como estoy desarrollando un lugar de C++ grande de álgebra lineal numérica de la biblioteca donde plantillas y tales son ampliamente utilizados. Intellisense dejó de funcionar en breve en el proyecto y en cierto modo me dio, pero ahora se convirtió realmente molesto sin ella así que me puse a investigar. Esto es lo que descubrí:

    Suponiendo que no es un archivo(s), que contiene el código que «se rompe» Intellisense,

    • si los archivos de cabecera que romper Intellisense están en el proyecto, pero no son #included, que todavía funciona en el resto de los archivos
    • si están incluidos, pero no del tipo declarado en el interior se utiliza, todavía funciona
    • si están incluidos y un tipo declarado en el interior se utiliza, es posible trabajar un poco (no Intellisense para los miembros, no Intellisense después de la ocurrencia de determinado tipo, pero, al menos, de nombres global y argumento info antes)
    • si Intellisense es roto en uno .archivo cpp, aún puede funcionar en otros donde el código problemático no está incluido o usados (pero me imagino que si se cuelga mal, será inhabilitado para todo el proyecto, a pesar de que no me suceda)
    • Intellisense parece ser actualizado después de una compilación exitosa (a veces no antes)
    • poner de código roto en el interior de #if 0, /* .. */ o // parece poner de Intellisense en la facilidad

    De las características de C++ he usado, de hecho sólo un par de romper Intellisense:

    • comparación con ‘>’ o ‘>=’ en el parámetro de plantilla (por ejemplo,static_assert<(size > 0)>)
      • no resuelto mediante el uso de paréntesis dobles (static_assert<((size > 0))> no ayuda)
      • resuelto mediante el uso de ‘<‘ o ‘<=’ lugar (static_assert<0 < size> obras)
      • resuelto por almacenar el valor en la enumeración y el uso que se especializan la plantilla
    • función explícita de la plantilla de especialización desactiva el argumento de información (por ejemplo,function<type>(args))
      • probablemente incapaz de resolver (tal vez envolver en una macro), pero puedo vivir con ello se rompe
    • la creación de instancias de plantilla de tipo de miembro, tales como Matrix::MakeMatrixType<3, 3>::Result r;
      • difícil de averiguar exactamente por qué sucede esto (probablemente debido a la utilización de Eigen)
      • solución de mover el código en un aparte .cpp ES donde no funciona (no siempre posible)

    Parece que algunos de esos problemas son debido a algunos «simplificado» de análisis, que es menos fuerte que una correcta C++ analizador. Con la información anterior, en parte, un «fiable» método de fabricación de Intellisense trabajar en un código existente:

    1. Configurar un proyecto vacío (una aplicación de consola), crear Main.cpp con un maniquí void main() {} en ella.
    2. Incluir uno de sus roto los archivos de cabecera, y math.h
    3. Construir (se debe recopilar, con el fin de Intellisense para actualizar de forma fiable)
    4. Probar si Intellisense está trabajando, escribiendo por ejemplo, sin( y ver si el argumento de ayuda emergente. A veces, esto iba a funcionar, pero miembro de ayudar a los no -, así que trate así.
    5. Hacer un ejemplo de algo en el archivo de encabezado, a construir, a ver si eso arregla para matar ES.
    6. Quitar código de la culpable de archivo y vaya al paso 3
    7. Después de encontrar y solucionar problemáticas de código, se vuelve a poner el código que quitó en el paso 5, inténtelo de nuevo
    8. Después de hacer todo un trabajo de clase, realiza una instancia de la clase siguiente, y así sucesivamente …

    Me pareció fácil de esta manera localizar los lugares de código que hizo problemas (me doy cuenta de que esto podría ser inviable para los grandes proyectos, en mi caso sólo un único archivo de 97 problemas). Tenga en cuenta que ‘Construir’ aquí se refiere a la compilación, la fase de vinculación no necesita terminar, así externos sin resolver están bien, la SE debe actualizar independientemente.

    Otro método de actualización ES (aparte de la construcción) es guardar todo, cerca del área de trabajo, eliminar .bcn archivo y vuelva a abrirlo. A continuación, espere a que ‘la Actualización de Intellisense … (N)’ a desaparecer de la barra de estado (N cuenta a cero, si no ir todo el camino, es una especie de muestra de progreso, donde se produjeron problemas). He encontrado este tedioso.

  9. 0

    Acerca de este problema que he notado algo interesante (en Visual Studio 2010):
    para resolver este problema he cambiado #include sintaxis en mis archivos de cabecera, antes de la era (antiguo proyecto realizado con VS 2005 y reabrió el uso de VS 2010):

    #include <myfile.h> 

    y puedo solucionar este problema con:

    #include "myfile.h"

    Después de intellisense empezar a trabajar correctamente!
    Espero que esto te puede ayudar!

  10. 0

    El problema es con el .vcproj archivos.

    Usted encontrará que si usted se cambia a modo de lanzamiento desde el modo de depuración, a construir, a continuación, tratar de intellisense que a menudo funciona.

    Cerca De Visual Studio. Si usted busca para el .vcproj archivos en el proyecto, editarlos y la búsqueda de los dos primeros casos de AdditionalIncludeDirectories. El valor para este debería ser algo como «..\,….\» en lugar de «../..».

    Vuelva a abrir el proyecto, dejar que el Intellisense terminar de construir, entonces debe ser fijo.

Dejar respuesta

Please enter your comment!
Please enter your name here