Montag, Juni 1, 2020

Was bedeutet die „Erwarteten“ (‚function-style-cast-oder Typ-Konstruktion“ Fehler bedeuten?

Bin ich immer den Fehler „Erwartet ‚(‚ function-style-cast-oder Typ-Konstruktion“, und habe mein bestes getan, um Forschung, die Bedeutung der diesen Fehler online, aber wurden nicht in der Lage zu finden, keine Dokumentation, was diesen Fehler verursacht.

Alle Fragen auf Stack Overflow, die ich gefunden habe, Fehler beheben einer bestimmten code-snippet und nicht mehr erklären in der Regel, was den Fehler verursacht.

Dazu gehören

  1. Erwartet ‚(‚ function-style-cast oder Konstruktion Antwort hebt mehrere Probleme mit dem code. Das Problem ist tatsächlich den Fehler verursacht ist unklar.
  2. c++ Xcode erwartet ‚(‚ function-style-cast oder Konstruktion definiert Funktionen innerhalb einer main-Funktion. Dies scheint eine klare syntax-problem, aber warum diese Fehler produziert wird, ist mir noch immer unklar.
  3. ‚(‚ function-style-cast-oder Bau-Art Xcode Fehler. In diesem letzten Beispiel, der OP ruft eine Funktion in einer Weise, dass sieht sehr ähnlich wie eine Funktionsdeklaration, plus Sie deklarieren eine Funktion mit dem gleichen Namen aber eine unterschiedliche Signatur. Je nachdem, wo der Fehler ausgelöst wird und die Meldung aus dem error -, es scheint, dass der Fehler hat etwas zu tun mit den Funktionsdeklarationen.

Bekomme ich eine Dokumentation im Stil beantworten, die übersetzt, was „function-style-cast“ und „Konstruktion“ bedeutet auf Englisch einfach? Wann wird der compiler wählen, um diesen Fehler auslösen, anstatt einen anderen Fehler?

Ich will nicht eine Antwort, die spezifisch für meine eigenen Fehler, aber wie gewünscht, hier ist mein MCVE

#include <boost/integer_traits.hpp>

class Test{
    const double MAX_DEPTH_VAL = (double) boost::integer_traits<unsigned short>.const_max;
    const double MIN_DEPTH_VAL = (double) boost::integer_traits<unsigned short>.const_max;

};

Wurde ich geführt, zu glauben, dass diese syntax möglich war, von dieser Antwort https://stackoverflow.com/a/2738576/3303546

Wie kann ich diese Frage?
Zeigen Sie den code. Nur der code, der die Fehlermeldung erzeugt…
Der Fehler sagt, dass der compiler denkt, dass Sie sind schreiben einer function-style-cast, d.h., so etwas wie T(x) wo T ist eine Art und x ist ein Objekt. Jedoch, es nicht die öffnende Klammer. Wahrscheinlich verwendet der code eine Art, wo man denkt, der Typ ist ein Wert. BTW, ist es nicht eine Ausnahme, sondern ein compile-time-Fehler.
Wir brauchen mehr code.
Die . operator nicht angewendet werden, – Typen. Sie anwenden itnto Objekte. Der Punkt der Antwort ist, dass die Werte nicht Funktionen, sondern Werte, die. Können Sie auf Sie mit der :: Betreiber.

InformationsquelleAutor Cecilia | 2016-10-15

1 Kommentar

  1. 7

    Dies ist ein syntax-Fehler. Nun, nicht Programmierer oder Amateure, vielleicht hören Sie den Begriff syntax-Fehler gleichsetzen und es mit einem Allgemeinen Fehler. Aber in C++ (und andere Sprachen) es hat eine bestimmte Bedeutung.

    Es ist ein Sprache Grammatik das ist ein Satz von Regeln, nach denen der compiler in einem frühen Stadium der übersetzung, bricht der Quellcode in logische Gruppen. Dies ist vor dem keine Bedeutung zugeschrieben wird, um diese Gruppen zu (dieser Teil wird manchmal auch als semantische überprüfung).

    Den syntax-Fehler, den Sie sahen, bedeutet, dass der compiler könnte nicht überein, den Quellcode in die Grammatik-Regeln für C++. Gerade weil es dies nicht konnte — es ist schwer für den compiler, um zu wissen, was der Programmierer beabsichtigt hat. Also, syntax-Fehlermeldungen sind oft Vermutungen oder nicht, beziehen sich auf die Programmierer Absicht.

    Wenn Sie diese Fehlermeldung sehen, der compiler ist, was ein ändern der code, der möglicherweise mit einem von den Grammatik Regeln, aber, die möglicherweise oder möglicherweise nicht tatsächlich eine gute Lösung in der situation.

    So, Sie können Sie behandeln diese Art von Fehler nur als „Allgemeine syntax error“, nicht sich sorgen zu viel über die details des Fehlers. Um es zu beheben, gehen Sie zurück zu einfacheren Ausdrücken, dass Sie sicher sind, nicht syntax-Fehler, und erstellen Sie dann bis zu, was Sie schreiben wollte.

    Eine Analogie für die englische Sprache könnte der Satz: „ich habe das Zimmer ging“. Stellen Sie sich eine Sprache übersetzungs-software. Das passt nicht jedem bekannt Satzbau, aber welche Fehlermeldung können Sie berichten? Die tatsächliche Vorschläge wird wahrscheinlich nicht helfen, Sie zu beheben, den Satz.


    In Ihre spezifischen Beispiel gibt einen syntax-Fehler. Der g++ Fehlermeldung ist anders:

    Fehler: expected primary-expression before ‚.‘ token

    wo primary-expression ist ein Einstieg in die C++ Grammatik. g++ sieht das . token und davon ausgegangen du meinst den member-access operator. Aber die Grammatik sagt, dass der linke operand der member-access operator muss ein primary-expression (und der semantischen Regeln, die sagen, dass das primary-expression kennzeichnet das Objekt, dessen Mitglied Sie zugreifen möchten).

    Jedoch in Ihrem eigentlichen code der linken Seite ist (double) boost::integer_traits<unsigned short> die nicht mit der Grammatik-Spezifikation für primary-expression. (In der Tat, es ist ein Typ-name). Der compiler kann nicht weiterfahren, von hier aus, so dass es aus sich heraus.

    Dein compiler auch Fehler beim Spiel der code zu jeder Grammatik-Regel, aber es erraten, Sie waren beim schreiben einer function-style-cast-oder Typ-Konstruktion.

    „Function-style-cast“ bedeutet, dass code wie int(5.0), so ist es vielleicht erkannt boost::integer_traits<unsigned short> als Art-Namen, und Sie Ahnen, dass Sie gemeint boost::integer_traits<unsigned short>(const_max), d.h. casting einige Variablen const_max zu geben.

    Ich bin mir nicht sicher, was dein compiler bedeutet, durch „Konstruktion“ hier.

    NB. Wenn Sie wissen wollen, wie man den eigentlichen code in deiner Frage, würde ich vorschlagen, beginnend eine neue Frage, wo Sie nach dem code und die Fehlermeldung und Fragen, wie man fix den code.

    Vermutlich „Konstruktion“ bezieht sich auf T() oder T(x, y, z).

    InformationsquelleAutor M.M

Kostenlose Online-Tests