Konstruktorargumente bei Intellisense

  • C++/CLI

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Elanda.

    Konstruktorargumente bei Intellisense

    Hallo zusammen,

    ich habe ziemlich große Probleme mit meiner IDE - Visual Studio 2019.

    Oft markiert sie mir Fehler, die gar nicht existieren. Nach dem ich dann debugge und das Programm starte, merkt der Compiler/Ide dann auch, -> oh, alles in Ordnung. Und wirft den Fehler raus.
    Das gleiche bei Kommentaren die ich mit /**/ über mehre Zeilen gehe lasse. Dann kommt immer wieder der Fehler dass das Kommentar nicht abgeschlossen wurde. Nach dem ich */ hinter das */ mache, und anschließend das erste entferne geht es wieder.

    Dass mit den Fehlern nervt mich schon ziemlich, aber wenn ich eigene Klassen mit Konstruktoren erstelle, und diese dann wo anders verwenden will, bekomme ich nicht mal die übliche Auswahl an Überladenen Konstruktoren.

    Über einen Umweg funktioniert es. Wenn ich eine Klammer einsetze, macht VS Studio direkt ein Block daraus, anschließend setze ich ein Komma, dann bekomme ich die Auswahl an Konstruktoren. So geht es meistens, aber ich benötige die Auswahl ja schon an erster Stelle, und nocht an der 2ten. Zusätzlich funktioniert es nur mit () Klammern. Wenn ich mit {} initialisiere bekomme ich egal wie, keine Auswahl.

    Dass ganze ist irgendwie total verbuggt, manchmal gehts, manchmal nicht. Ich hab euch ein Bild, und ein Gif(nicht meines) angehängt dass mein Problem ganz gut beschreibt.

    Hoffe ihr wisst, ob man dass irgendwie einstellen kann.

    LG

    Nachtrag:
    Ich benutze Visual Studio Professional 2019 sowohl auf meinem Laptop, also auch auf meinem High-End System. Die genannten Fehler treten auf beiden auf.
    Bilder
    • Konstruktor Argument.png

      6,08 kB, 741×126, 95 mal angesehen
    • 37245311-2a255c1e-2464-11e8-9179-cfff81774843.gif

      2,02 MB, 1.920×1.080, 148 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Farliam“ ()

    Bei mir (ich verwende CLion) ist das auch so, stört mich aber nicht dachte es wäre normal.
    Immer wenn ich Bestrich setze zeigt er es mir erst an, jedoch manchmal funktioniert auch das nicht, dann muss ich die Referenz auschecken und im Quelltext der Klasse nachschauen.

    Lg
    Elanda
    ----------------------------------------------------------------------------------------------------------------------

    Hier könnte meine Signatur stehen, aber die ist mir abfußen gekommen.

    ----------------------------------------------------------------------------------------------------------------------
    Mich stört dass sehr. Es ist ja nicht nur dass Problem mit den Fehlenden Parameterangaben. Es werden Fehler markiert die keine sind, abgeschlossene Kommentare bemängelt ect..

    Ich komme von Basic und dort funktioniert z.B. Überladene Funktionen ohne Probleme(Parameterliste). Auch beim neuen Instanzieren (Klassen) werden mir die Parameterlisten von Intelli angezeigt, warum sollte dass in C++ nicht auch gehen? (Es geht ja, nur über absolut Absurde Umwege)
    Hmm wenn ich so zurückdenke glaube ich nicht, dass ich diese Probleme mit VS hatte.
    Versuche mal die Caches zu löschen und Klassen neu indexen.
    Wenn die zu sehr belegt sind, kann es schon zu dem einen oder anderen false positives kommen.

    Und halte auch immer nach IDE Updates Ausschau, manchmal patchen die gerade das, an was du zu leiden scheinst.
    ----------------------------------------------------------------------------------------------------------------------

    Hier könnte meine Signatur stehen, aber die ist mir abfußen gekommen.

    ----------------------------------------------------------------------------------------------------------------------
    Der Laptop ist noch relativ frisch aufgesetzt.
    Und ich könnte auch direkt ein neues Projekt starten, die Fehler würden direkt wieder auftreten.

    Auch die Geschwindigkeit ist sehr schlecht, wenn ich einen Fehler mache, markiert VS mir diesen. Nach entfernen dauert es oft fast 10-20 Sekunden bis VS merkt dass der Fehler behoben wurde. Damit kann ich aber leben.

    Ich würde nur ganz gerne das Problem mit Intelli lösen. Klar kann ich auf die Defintion/Deklaration gehen und mir den Quelltext anschauen, doch manchmal ist dass auch nicht gerade übersichtlich. Und Intelli würde dass ganze erheblich Beschleunigen.

    Gibt es evt. eine Einstellung, wo ich die Auto-Text-Einfüge Option bearbeiten kann? Damit könnte ich z.B. verhindern, dass mir direkt schließende Klammern eingefügt werden. Vielleicht reagiert Intelli dann auch wieder normal.

    Nachtrag :

    Wenn ich die schließende Klammer wegmache, und dann eine Taste drücke, werden mir von Intelli Methoden/Typen ect angezeigt.(siehe bild) aber nicht die benötigten Typen für die Instanzierung meiner Klasse.
    Bilder
    • b.png

      17,02 kB, 825×307, 83 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Farliam“ ()

    Hmm normalerweise ist das schon von Anfang an perfekt eingestellt.
    Eine andere Möglichkeit könnte auch die CPU sein, wenn die schlecht ist kann es auch zu Problemen kommen da C++ lexing (auch Kompilation) sehr sehr sehr Anstrengend für den Prozessor ist.
    Aber das denke ich wird bei dir wohl nicht der Fall sein?
    ----------------------------------------------------------------------------------------------------------------------

    Hier könnte meine Signatur stehen, aber die ist mir abfußen gekommen.

    ----------------------------------------------------------------------------------------------------------------------
    Nein, mein Laptop vielleicht. Aber mein Desktop-PC auf gar keinen Fall.

    Schau mal hier : github.com/microsoft/vscode-cpptools/issues/1664

    Verstehe ich dass richtig das man mit {} initialisieren soll, weil er mit () nicht weiß,ob man eine Funktion o.ä aufruft?
    Funktioniert nur leider auch nicht. Ich verwende zum erstellen meiner Klasse {} doch dass Hilft nichts^^

    Okay so funktioniert es:

    Person XYZ {} dann die schließende Klammer entfernen. Darauf ein , setzen. Anschließen dass Komma entfernen, somit bekomme ich den ersten Parameter.
    Aber das ist doch mehr als umständlich ^^

    Nun wäre es interessant zu wissen, ob es eine Option gibt, die markiert ob Klammern direkt geschlossen werden, wenn eine geöffnete eingefügt wird. Eventuell wird ja dadurch das Komma überflüssig, und die Optionen direkt beim angeben der ersten { angezeigt.

    Problem gelöst

    Das Problem mit der Parameterliste steht im Zusammenhang mit Folgender Option :



    Wenn man diese Option deaktiviert. Und die Klammern manuell setzen muss, funktioniert Intelli wieder normal 8o :thumbsup:
    Bilder
    • Yes.png

      29,4 kB, 864×578, 224 mal angesehen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Farliam“ ()

    Farliam schrieb:

    Verstehe ich dass richtig das man mit {} initialisieren soll, weil er mit () nicht weiß,ob man eine Funktion o.ä aufruft?
    Funktioniert nur leider auch nicht. Ich verwende zum erstellen meiner Klasse {} doch dass Hilft nichts^^

    Das Phänomen nennt sich auch "most vexing parse" (ärgerlichste Analyse).
    Es kommt ganz darauf an in welchem Kontext du die Variable definierst und wie.
    Normalerweiße sollte es genügend sein auch () zu verwenden (sofern du es mit parameter erstellst, ohne parameter wird es interpretiert als Funktion mit keinen Parametern)
    Dann musst du aber auch aufpassen wie du die Argumente übergibst

    C-Quellcode

    1. std::string einString(std::string());
    wird sehr warscheinlich als Funktion als Variable identifiziert, da du ja deutlich einen Typen als parameter übergibst (die extra klammern danach werden ignoriert)
    Wenn du hingegen etwas tust so wie

    C-Quellcode

    1. std::string einString { std::string() };
    dann wird der Kompilierer es eindeutig als variable anerkennen

    Wenn du es aber mit Klammern schreiben möchtest, machst du entweder

    C-Quellcode

    1. std::string einString("");

    oder

    C-Quellcode

    1. std::string einString((std::string()))
    die extra klammern konvertieren es explizit in ein rvalue anstelles es als Typ zu sehen.
    ----------------------------------------------------------------------------------------------------------------------

    Hier könnte meine Signatur stehen, aber die ist mir abfußen gekommen.

    ----------------------------------------------------------------------------------------------------------------------