Erklärung für unqualified-id



  • Hallo,
    ich habe mir C++ mehr oder weniger selbst beigebracht, deshalb fehlt mir leider etwas das Bücherwissen zu einigen Begriffen: Einer der häufigsten Fehler die ich beim Compilieren von Programmen bekomme ist sicherlich "expected unqualified-id before ...". Normalerweise ist das kein Problem, man guckt halt in der Zeile mit dem Fehler und sieht dann, dass man sich irgendwo verschrieben hat. Aber mich stört, dass ich die Fehlermeldung nicht verstehe. Was genau ist eine unqualified-id?

    Leider ist es quasi unmöglich dafür mit einer Suchmaschine eine allgemeine Erklärung zu bekommen, weil zu viele Suchergebnisse sich einfach nur mit fehlerhaften Code beschäftigen, ohne eine Erklärung zu liefern.


  • Administrator

    Definition von unqualified-id nach dem C++ Standard 14882:2003.

    unqualified-id:

    • identifier
    • operator-function-id
    • conversion-function-id
    • ~ class-name
    • template-id

    Ein identifier ist einfach einen gültigen Bezeichner. Klassenname, Variablenname, usw.
    Eine operator-functin-id ist der Name eines Operators. + , - , += , % , usw., bzw. auch operator + , operator * , usw.
    Eine conversion-function-id ist ein Konvertierungsoperator. operator int , operator double usw.
    Ein ~class-name ist einfach ein Destruktor einer Klasse. Wobei es mich allerdings ein wenig überrascht, dass nicht ein Klassenname selbst bereits eine unqualified-id ist und mich frage, ob dies ein Druckfehler ist.
    Eine template-id ist der template Kopf. template<typename a, typename b> oder wie es der Standards sagt: template-name<template-argument-list[t]opt[/t]>

    Grüssli



  • Wenn du das Buch von Stroustrup hast, dann schau mal in den Anhang A unter Ausdrücke (A.5).
    "unqualified-id" bezeichnet einen "uneingeschränkten Bezeichner (identifier)", d.h. ein Bezeichner (Name), der für sich alleine steht.
    Konkret:
    - Bezeichner(identifier)
    - Operator-Funktion: operator ...
    - Konvertierungsfunktion: (Typ)
    - Destruktorname: ~Klassenname
    - Templatename

    Im Gegensatz dazu dann "qualified-id", d.h. ein Name, der nur durch explizite Angabe von weiteren Tokens einen Sinn ergibt, d.h. "nested-name qualifier" (geschachtelte Namen) durch Angabe des Namensbereiches (namespace): A::B
    (bzw. optional noch mit der expliziten Angabe des "template"-Schlüsselwortes).

    Also: "unqualified-id" ist ein Bezeichner ohne Angabe des Namensbereiches.



  • Danke für die Erklärung, der Begriff ist ja ganz schön komplex.

    Ich glaube meine Hauptschwierigkeit lag darin, dass ich 'unqualified' für mich immer als unqualifiziert im Sinne von ungeeignet übersetzt habe und nicht daran gedacht habe, dass das Wort auch ganz andere Bedeutungen haben kann. Mit der Übersetzung als uneingeschränkt macht das alles schon viel mehr Sinn.



  • Den Begriff habe ich auch selber übersetzt (da ja "unqualifiziert" in diesem Zusammenhang keinen Sinn ergibt).

    English for runaways...


Anmelden zum Antworten