2016-08-04 27 views
1

ich eine Datei in Quellcodeverwaltung hinzugefügt, die als eine ENUM Definition hatte:Enum Fehler: erwartete Kennung vor numerische Konstante

enum { OK = 0, ERROR }; 

Aber auf Kompilation wurde Fehler wie das Werfen „erwartete Kennung vor numerische Konstante.“ Mußten meine Nachforschungen zu diesem und dem Täter "OK" sein, was irgendwo anders im Code definiert wurde. Also änderte ich OK mit sagen, OK_1, und das Problem wurde in der Tat gelöst.

Ich konnte jedoch nicht finden, wo in meiner Code-Basis war das "OK" zuvor definiert. Ich lief ein Grep von der obersten Ebene und konnte es nicht finden. Ich bin mir ziemlich sicher, dass ich den gesamten anwendungsbezogenen Code abgedeckt habe, aber OK war nicht da.

Ich denke, es ist unwahrscheinlich, dass es ein Teil einer gemeinsam genutzten Bibliothek war, da der Kompilierungsprozess nicht einmal die Verbindungsphase erreicht hat. Es könnte vielleicht von einer der Header-Dateien stammen.

Gibt es ein Weg/Linux-Tool, das irgendwie ausgetrickst werden kann, um herauszufinden, woher dieses OK kommt?

+0

benötigen Sieht aus wie Sie Pre-Prozessor Ausgang http://stackoverflow.com/questions/4900870/can-gcc-output-c-code-after-preprocessing benötigen –

+0

Ihre Projektverzeichnisstruktur ist flach? Wenn nicht, ist es unwahrscheinlich, dass grep etwas findet. Du solltest grep aus einem [find Befehl] heraus starten (http://man7.org/linux/man-pages/man1/find.1.html) – StoryTeller

+0

@SameerNaik Genau das, was ich brauchte, danke. :) – user3814996

Antwort

-1

mein Englisch ist nicht gut, aber Sie können versuchen enum var {xxx, xxx}, können Sie var anpassen.

+1

Ich denke, Sie versuchen, den fehlenden Bezeichner aufzuzeigen. Aber die Verwendung eines Bezeichners verursacht immer noch ein Problem. – user3814996

+0

Ich versuche es zu kompilieren. Es ist ok auf meinem os.try, die Option -std = C++ 11 hinzuzufügen –

-1

Wenn Sie C++ 11 verwenden einen Blick auf Enum-Klasse: http://www.cprogramming.com/c++11/c++11-nullptr-strongly-typed-enum-class.html

Ein großer Nachteil von ENUM ist, dass man 2 Aufzählungen mit dem gleichen Namen haben kann nicht. Mit diesem Enum-Klasse zurückziehen, weg Sie etwas wie diese schreiben können:

enum class Color {RED, GREEN, BLUE}; 
enum class Feelings {EXCITED, MOODY, BLUE}; 

Und im Code später:

Color color = Color::GREEN; 
if (Color::RED == color) 
{ 
    // the color is red 
} 

Codebeispiel aus verlinkt www Seite