11

ich gut im typischen Paradigma versiert bin:deklarieren und in Header-Datei Konstante initialisieren

//.h 
extern const int myInt; 

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

Aber es muss doch einen Weg zu geben, dass mit Bibliotheken oder anderen Instanzen für die Verwendung in .h Dateien zu setzen, wo Sie kann nicht auf die Implementierungsdatei zugreifen.

Zum Beispiel, ich versuche, wie so eine NSString Konstante an eine .h Datei in einem Xcode-Projekt hinzuzufügen:

static NSString *const myString = @"my_string"; 

aber wenn ich versuche, myString zu verwenden, erhalte ich die Fehler

Initializer Element ist keine konstante zur Kompilierungszeit

auf myString , um anzuzeigen, dass es nicht ordnungsgemäß instanziiert wird. Wie deklariert man Kompilierzeitkonstanten in einer C++ - oder Objecitve-C-Headerdatei?

+0

Also soll das C oder C++ sein? Sie können Globals mit Laufzeitausdrücken in C++, aber nicht in C initialisieren. –

+0

Gut zu wissen, dass es für C. nicht möglich ist, Tags zu aktualisieren. –

Antwort

17

In C++ const Objekte interne Bindung haben, sofern nicht ausdrücklich extern erklärt, so ist es kein Problem, eine Definition in eine Header-Datei wie mit Putting:

const int myInt = 55; 

Mit dieser Definition und erster Erklärung kann myInt sein wird als Integer-Konstantenausdruck verwendet, z. B. für Array-Grenzen und dergleichen.

Ich kann nicht für Objective C antworten.

+0

Das funktioniert in C++ und Objective-C, danke! –

+0

@Vorac: Dies funktioniert in g ++ (angenommen, dass Sie tatsächlich C++ - Quellcode kompilieren). Ihre Bearbeitung hat dazu geführt, dass ich Zeit verschwendet habe, um etwas erneut zu überprüfen, das bereits korrekt war, und es hat diese Antwort intern inkonsistent gemacht. Warum würde ich sagen "const" -Objekte haben eine interne Verknüpfung und dann und ein _explicit_ 'static' zum Beispiel? Wenn Sie sich bei etwas nicht sicher sind, dann kommentieren Sie; nicht bearbeiten. Ich habe deine Bearbeitung zurückgesetzt. –