Intellisense geht nicht mehr



  • Hast Du vielleicht einen Knoten in den #include? Es gibt ein Hilfethema
    "Probleme mit Intellisense" (oder so ähnlich).



  • Knoten? Hmm, weis jetzt nicht ganz was du meinst, aber mehrfaches Includieren habe ich mit #ifndef #define abgesichert...



  • Genau das meinte ich. Bei mir gab es einmal das Problem. Manchmal scheint mir da Intellisense aufzustossen. Ich hatte da ausfühtlich mit den Headern gespielt (also testweise die Header vereinfacht), bis Intellisense wieder funktioniert hat.

    *Falls* das Dein Problem sein sollte, dann könnte das eine Lösung sein:

    #pragma once
    // Hier dann weitere Includes, die einmalig benötigt werden
    
    // ab hier dann immer nach diesem Muster
    #include "Foo.h"
    namespace Foos {ref class Bar;}
    using namespace Bars;
    #include "FooBar.h"
    namespace FooBars {ref class BarFoo;}
    using namespace FooBars;
    // und so weiter, immer nach obigen Muster
    
    // ab hier dann die normalen namespaces
    using namespace System;
    // ...
    

    So sehen (nach längeren Tests) nun alle meine Header aus. Ist einfach, gibt keine Probleme mehr mit Intellisense und auf die Art kann man "kreuz und quer" includen. Der "namespace" ist nur jeweils mit dabei, damit eben Intellisense (manchmal auch der Kompiler) sich nicht mehr aufregen.



  • using namespace im Header sollte man nicht ansetzen.

    Wenn man die da rein macht, damit sich der Compiler nicht mehr beschwert, ist irgendwas am Design kaputt.



  • Hmm, mein Forms1.h sieht so aus:

    #pragma once
    
    #include "XMLDataINOUT.h"
    #using <System.Xml.dll>
    #using <System.dll>
    
    #include "Calculations.h"
    
    namespace zbftoolv2 {
    
    	// Standard Windows Forms namespaces
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace System::IO;
    
    	//user defined namespaces
    
    	//XML-Serializer
    	using namespace System::Xml;
    	using namespace System::Xml::Serializati
    

    Is das soweit ok?



  • Funktioniert es noch vor der Zeile:

    #include "Calculations.h"

    und innerhalb des Calculations.h Headers ?
    Welche Warnungen gibt es beim Compilieren ?



  • Es funktioniert weder vor dem include noch in der Calulations.h. Warnings/Kompilierungsfehler gitb es keine. Der Witz ist, lege ich neue Header Dateien an und kopiere den gesamten Code da rein, dann geht es. Ich bin langsam mit meinem Latein am Ende. Werde jetzt wohl alle Files "neu" erstellen... 😡



  • Langsam langsam,

    kann sein das es ein Fehler im VC ist (baue auch derzeit zum 3. mal ein Projekt um weil es probleme mit dem Formdesigner gibt)´, aber lass uns erst mal sicherstellen das sonst alles ok ist.

    Mach das ganze von eben noch mal mit bzw. vor #include "XMLDataINOUT.h"



  • Geht leider auch nicht, habe es jetzt mal in allen Dateien vor allen includes getestet. Bringt nix.



  • Knuddlbaer hat recht. Versuch mal, ein neues Projekt zu erstellen und dann Deine Dateien wieder einzubinden - kann auch helfen.

    Aber etwas zu den namespaces. Es ist kein Designproblem - sondern es geht mir nur um Forwarddeklarationen.

    Wenn ich ein paar Basisklassen habe, die sich teilweise gegenseitig brauchen, dann sollte das noch kein Designproblem sein (Beispiel: Eine Exceptionklasse und die Lokalisierungsklasse brauchen sich immer gegenseitig. Keine Sprachdll = Ausnahme und Ausnahme sollte andersherum lokalisiert sein).
    Vielleicht würden andere diese Klassen in einen Header packen, aber das sieht komisch aus.

    Ohne namespace gibt es Fehler wegen der namespaces (die ja quasi auch forward deklariert sein müssten) - so gibt es die eben nicht. Auf die Art kann ich so eine forward declaration einfach und immer fehlerfrei hinein nehmen.

    So ist alles aufgeräumt, es gibt keine Fehler und weitere Forwarddeklarationen sind einfach und schnell realisierbar. Meiner Meinung nach führt das sogar noch zu mehr Trennung und Kapselung.

    Aber ich will ja lernen und wenn Du mir erklärst, wie man es besser macht, dann würde mich das freuen 😉



  • using namespace Bars;

    Ist keine Forwarddeklaration sondern ein using namespace.

    Dieser hat im Header nichts verloren. Du solltest die Forwärtsdeklaration also mit dem Namen des Namespaces machen.

    @pocketom

    Wenn Du also in form1.h an den Anfang gehst und strg+space drückst, passiert nix ? :o(



  • Das ist ja das Problem. Wenn ich:

    #include "Foo.h"
    namespace Foos {ref class Bars::Bar;}
    

    mache, dann gibt es auch Fehler. Diese kommen zuerst nicht, aber wenn dann mehrere Forward Deklarationen kommen, dann gibt es irgendwann Probleme. Und Intellisense macht dann auch Probleme.

    Davon abgesehen hatte ich das alles auch getrennt (also using namespace stand erst weiter unten im Header, aber warum nicht einen Block schreiben und so ist auch alles an Information für den Leser gleich da?).

    Du hast auf jeden Fall recht, nur funktioniert es so bei mir nicht immer und ist das nicht unnötige Zeit für die Fehlersuche (sprich, man darf sich dann durch mehrere Header durcharbeiten, sich die Includereihenfolge ansehen und den Fehler finden)?

    @pocketom: Du hast also keine cyclic includes oder forward declaration drin? Denn eben da gibt Intellisense auf. Wenn es nur das Snippet ist, dann kann sich auch etwas in Deinen Projektdateien gefressen haben (also durchaus mal das Projekt neu erstellen).



  • Gegenfrage:

    Für was verwendest Du denn überhaupt Namespaces wenn Du sie doch überall mit einem using namespace sichtbar machst ?



  • Ich verwende "using" eigentlich nicht, da ich alle Klassen, etc. voll qualifiziert anspreche (ich muss sogar). Dennoch bekomme ich Fehler bei der Forward Declaration. Ich verstehe einfach nicht, warum diese Fehler kommen.



  • Erzeuge mal einen der Fehler und stelle es mal in einem neuen Beitrag zur Diskussion, wir sind hier etwas vom Thema abgekommen (sry)



  • So, habe es mittlerweile wieder hinbekommen. Hatte eine "helper.h" Datei in der ich Textersetzungen durchgeführt habe um effizient vorwärts zu kommen. Die habe ich mal rausgeschmissen, seit dem gehts wieder. Die Datei war jedoch nirgends inkludiert und wurde somit im Projekt auch nirgends verwendet!!! 😮


Anmelden zum Antworten