11

jestem dobrze zorientowany w typowym paradygmatu:Deklaracja i zainicjować stałe w pliku nagłówkowym

//.h 
extern const int myInt; 

//.c, .m, .cpp, what have you 
const int myInt = 55; 

Ale Musi być jakiś sposób, aby umieścić to pod .h plików do użytku z bibliotek lub innych przypadkach, gdzie nie może uzyskać dostępu do pliku implementacji.

Na przykład próbuję dodać NSString stałej do pliku .h w projekcie Xcode tak:

static NSString *const myString = @"my_string"; 

jednak, gdy próbuję użyć myString, pojawia się błąd

Initializer elementu nie jest stała w czasie kompilacji

na myString , co oznacza, że ​​nie jest prawidłowo tworzony. W jaki sposób zadeklarować stałe kompilacji w pliku nagłówkowym C++ lub Objecitve-C?

+0

Czy to ma być C lub C++? Można inicjować globale za pomocą wyrażeń wykonawczych w C++, ale nie w C. –

+0

Dobrze wiedzieć, że nie jest to możliwe dla C. Będzie aktualizować tagi. –

Odpowiedz

17

W C++ const obiekty mają wewnętrzne powiązania chyba że wyraźnie zadeklarowane extern, więc nie ma problemu z wprowadzeniem definicji w pliku nagłówka, takie jak:

const int myInt = 55; 

Z tej definicji i pierwszej deklaracji myInt może być stosowany jako stałe wyrażenie całkowite, na przykład dla granic macierzy i tym podobne.

Nie mogę odpowiedzieć na Cel C.

+0

To działa zarówno w C++, jak i Objective-C, dzięki! –

+0

@Vorac: To działa w g ++ (zakładając, że faktycznie kompilujesz kod źródłowy C++). Twoja edycja zmusiła mnie do marnowania czasu na ponowną weryfikację czegoś, co było już poprawne i sprawiło, że ta odpowiedź była wewnętrznie niespójna. Dlaczego miałbym powiedzieć, że obiekty '' const' mają wewnętrzne powiązania ", a następnie i _explicit_' static' do przykładu? Jeśli nie jesteś pewien czegoś, to skomentuj; nie edytuj. Wycofałem twoją edycję. –

Powiązane problemy