Forum: PC-Programmierung Warum soll ich so keine Variable vom Typ Enum in C++ anlegen ?


von Flunder (flunder)


Lesenswert?

Wenn ich
1
enum {TICK, TRICK, TRACK} name = TRICK;
in einem C++ Quelltext (.cpp) an den gcc verfüttere, meckert er
1
a value of type "enum <unnamed>" cannot be used to initialize an entity of type "enum <unnamed>"
.
Was gibt es an meiner Codezeile auszusetzen ?

von Oliver S. (oliverso)


Lesenswert?

Genau das, was da in der Fehlermeldung steht. gcc 13 auf meinem Rechner 
compiliert es, mit der Warnung:

warning: unnamed type with no linkage used to declare variable '<unnamed 
enum> name' with linkage

Die erklärt das Problem etwas genauer.

Gib dem enum einen Namen, das löst das Problem:
1
enum nephews {TICK, TRICK, TRACK} name = TRICK;

Oliver

von Flunder (flunder)


Lesenswert?

Oliver S. schrieb:
> Gib dem enum einen Namen, das löst das Problem

Leider nein :
1
a value of type "nephews" cannot be used to initialize an entity of type "nephews"

von Michael H. (micha_22)


Lesenswert?

Lass die Initialisierung weg und mach das später.
1
enum nephews {TICK, TRICK, TRACK} name;
2
name = TRICK;

Bzw. braucht man da kein typedef?

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

Flunder schrieb:
> Oliver S. schrieb:
>> Gib dem enum einen Namen, das löst das Problem
>
> Leider nein :a value of type "nephews" cannot be used to initialize an
> entity of type "nephews"

Was für einen gcc hast du denn da?

Oliver

: Bearbeitet durch User
von Michael B. (laberkopp)


Lesenswert?

Flunder schrieb:
> Was gibt es an meiner Codezeile auszusetzen ?

Nichts.

Du wirst vorweg irgendwelche defines haben.

https://www.onlinegdb.com/online_c_compiler

akzeptiert deine Zeile in jeder GCC Version.

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Michael H. schrieb:
> Lass die Initialisierung weg und mach das später.
Ich würde da sogar noch einen Schritt weiter gehen:-)
1
  enum nephews {TICK, TRICK, TRACK};
2
  nephews name = TRICK;
oder gar
1
  nephews name = nephews::TRICK;

Michael H. schrieb:
> Bzw. braucht man da kein typedef?
Bei Compilern die C & C++ vertragen benötigt man das in diesem Fall 
nicht mehr. Wenn es einer ist, der nur C kann, benötigt man das.

von Daniel F. (foxi_the_daywalker)


Lesenswert?

Da du C++ schreibst, wäre vielleichte eine 'enum class' etwas für dich?
1
enum class Nephews
2
{
3
    Tick,
4
    Trick,
5
    Track,
6
};

von Obelix X. (obelix)


Lesenswert?

Flunder schrieb:
> enum {TICK, TRICK, TRACK} name = TRICK;

In der Zeile gibt es zwei mal TRICK.

von Michael B. (laberkopp)


Lesenswert?

Obelix X. schrieb:
> In der Zeile gibt es zwei mal TRICK.

Überraschung, der zugewiesene Wert ist also bekannt.

von Rolf M. (rmagnus)


Lesenswert?

Obelix X. schrieb:
> Flunder schrieb:
>> enum {TICK, TRICK, TRACK} name = TRICK;
>
> In der Zeile gibt es zwei mal TRICK.

Ja, und?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.