2012-06-12 21 views
6

Próbowałem następujący wiersz:
static const const char* values[];
ale pojawia się następujące ostrzeżenie na VC++ ostrzeżenie C4114: kwalifikator tego samego typu stosuje się więcej niż jeden raz.
Co to jest poprawna deklaracja?

edit:
Celem jest stworzenie niezmienne tablicę c ciągówJak utworzyć statyczną tablicę const const char *

+0

Co chcesz utworzyć? Tablica stałych wskaźników do stałych postaci? –

Odpowiedz

13

Napisałeś const const zamiast static const char* const values[]; (gdzie można zdefiniować wskaźnik i wartości leżących u podstaw jak const)

Ponadto, trzeba go zainicjować:

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

+0

+1, Ale inicjalizacja zależy od kontekstu, jeśli jest to "statyczny" element klasy (moje przypuszczenie), to bez inicjalizacji można to zrobić w deklaracji ... –

+0

Czy rozumiem poprawnie, pierwsza stała jest dla ciągu, a druga dla tablicy? – Tommy

+7

Aby wyjaśnić słowo kluczowe "const": "const" jest zawsze związane z "elementem" pozostawionym do niego. Wyjątkiem jest to, że gdy const jest pierwszym słowem w wyrażeniu, odnosi się ono bezpośrednio do niego. Aby być super-poprawnym, należy zdefiniować ciąg jako "static char const * const values ​​[]", który można odczytać od prawej do lewej: wartości są tablicą stałych wskaźników do stałych znaków, a wszystko to jest statyczne. – AquilaRapax

4

Spróbuj

static const char* const values[]; 

Chodzi o to, aby umieścić dwie const s po obu stronach *: lewy należy do char (stały charakter), prawo należy do char* (stały wskaźnik do znaku)

+2

Na marginesie jest to to samo, co 'static char const * const values ​​[]' – Dennis

Powiązane problemy