"designated initializers" - Compiler Fehlermeldung
-
Hallo,
ich habe eine Übung in meinem Buch (Head First: C) gelöst und auch mit der dort angegebenen Lösung verglichen (ich hatte alles richtig) und in dem Buch wird der Quellcode auch ohne Fehlermeldung kompiliert. Wenn ich jedoch versuche folgenden Quellcode:
#include <stdio.h> typedef enum { COUNT, POUNDS, PINTS } unit_of_measure; typedef union { short count; float weight; float volume; } quantity; typedef struct { const char *name; const char *country; quantity amount; unit_of_measure units; } fruit_order; void display (fruit_order order) { printf("This order contains "); if (order.units == PINTS) printf("%2.2f pints of %s\n", order.amount.volume, order.name); else if (order.units == POUNDS) printf("%2.2f lbs of %s\n", order.amount.weight, order.name); else printf("%i %s\n", order.amount.count, order.name); } int main() { fruit_order apples = {"apples", "England", .amount.count=144, COUNT}; fruit_order strawberries = {"strawberries", "Spain", .amount.weight=17.6, POUNDS}; fruit_order oj = {"orange juice", "U.S.A", .amount.volume=10.5, PINTS}; display(apples); display(strawberries); display(oj); return 0; }
zu kompilieren, kommt folgende Fehlermeldung für die Zeilen, wo ich "apples", "strawberries" und "oj" deklariere und initialisiere:
C:\Dev-Cpp\Uebung14.c expected primary-expression before '.' token
Was mache im bei den "designated initializers" falsch, in dem Buch, wurde das genauso beschrieben und funktioniert dort auch?
Mfg Jaob
-
Welchen Compiler / IDE nutzt du?
Dev-Cpp!Und welche Version?
-
fruit_order apples = {"apples", "England", .amount.count=144, COUNT};
Hmm!
.amount.count=144
sieht seltsam aus, habe ich noch nie gesehen.
-
Und welche Version?
Compiler Version: "gcc (GCC) 3.4.2 (mingw-special)"
Hmm! .amount.count=144 sieht seltsam aus, habe ich noch nie gesehen
designated initializers
werden in C++ auch nicht unterstüzt und sind in C99 als Feature integriert worden.Was wäre denn eine alternative, um eine Variable in einem union zu initialisieren?
(In dem Buch wurde noch die "dot notation" genannt, aber die geht doch nur, wenn die Variable zuerst deklariert wurde:quantity q; q.volume = 3.7;
oder liege ich/das Buch da falsch?)
-
Jaob schrieb:
Und welche Version?
Compiler Version: "gcc (GCC) 3.4.2 (mingw-special)"
Das Jahr 2004 lässt grüßen! Nimm was aktuelles. Ein neuer GCC compiliert das wie gewünscht.