2012-06-12 16 views
6

Ich habe versucht, die folgende Zeile:
static const const char* values[];
Aber ich erhalte die folgende Warnung auf VC++ Warnung C4114: gleichen Qualifier mehr als einmal verwendet.
Was ist die korrekte Deklaration?

edit:
Das Ziel ist eine unveränderliche Reihe von C-StringsWie ein statisches const Array von const char erstellen *

+0

Was möchten Sie erstellen? Ein Array konstanter Zeiger auf konstante Zeichen? –

Antwort

13

Sie schrieb const const statt static const char* const values[];

auch (wo Sie den Zeiger und die zugrunde liegenden Werte als const definieren), müssen Sie es initialisieren:

static const char* const values[] = {"string one", "string two"};

+0

+1, Aber die Initialisierung hängt vom Kontext ab, wenn es ein 'statisches' Mitglied einer Klasse ist (meine Vermutung) dann keine Initialisierung kann in der Deklaration getan werden ... –

+0

Verstehe ich richtig, der erste const ist für die Zeichenfolge und der zweite für das Array? – Tommy

+7

Um das Schlüsselwort 'const' zu verdeutlichen: Ein' const' bezieht sich immer auf das "Item", das ihm übrigbleibt. Die Ausnahme hiervon ist, wenn const das erste Wort im Ausdruck ist, dann bezieht es sich auf den Gegenstand, der darauf zutrifft. Um also superkorrekt zu sein, würde man den String als 'static char const * const values ​​[]' definieren, der von rechts nach links gelesen werden kann: values ​​ist ein Array von const-Zeigern für const chars und all dies ist statisch. – AquilaRapax

4

static const char* const values[]; 

Die Idee, die beiden const s auf beiden Seiten des * zu setzen, ist versuchen zu schaffen: die linke gehört char (konstante Zeichen), gehört das Recht auf char* (konstante Zeiger auf Zeichen)

+2

Nebenbei ist das das gleiche wie 'static char const * const Werte []' – Dennis

Verwandte Themen