Grundsätzlich möchte ich eine globale Konstante in Std :: Array in einer anderen Datei verwenden.Globale Konstante in C++ 11 in std :: array verwendet
Ich bin mir bewusst, dass globale Variable Frage wurde hier oft gefragt. Zum Beispiel dieser: Defining global constant in C++
Und ich persönlich bevorzuge Methode zu verwenden, 5 oder 6:
5: const int GLOBAL_CONST_VAR = 0xFF;
6: extern const int GLOBAL_CONST_VAR; und in einer Quellendatei const int GLOBAL_CONST_VAR = 0xFF;
Mein Projekt benötigt viele Konstanten, wie zB die Solarkonstante. Und einige werden für std :: array verwendet, zum Beispiel nvegetation_type, nrock_type.
Ich verwendete die Methode 5, so dass nur eine Kopfzeile für alle anderen Quelldateien verwendet wird. Aber das multiple Definition Problem entsteht, ähnlich wie: Multiple definition and header-only libraries und hier: Why aren't my include guards preventing recursive inclusion and multiple symbol definitions?
Aber das sieht aus wie nicht ein Problem in meinem Visual Studio C++ Projekt und ich habe keine Ahnung, warum noch. Ich habe Makefile unter Linux verwendet und es auch kompiliert.
Wenn jedoch I verwende Methode 6 und definieren Array in anderer Quelle Header-Datei in C++ 11 als
extern const int nvegetation_type ;
const std::array< double, nvegetation_type > some_variable
= { { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1} };
I Fehler wie erhalten:
error C2065: 'nvegetation_type': undeclared identifier.
I unter der Annahme, bin, wenn ich benutze Header/Source-Ansatz, ich kann nicht direkt verweisen globale Variablen, zumindest für std :: array. Ich lese einige ähnliche Links, aber keiner hat dies erwähnt (Vielleicht meine Suche war unglücklich). http://www.learncpp.com/cpp-tutorial/42-global-variables/ Also, was ist die Lösung?
Ich weiß nicht, was Sie fragen. –
Ich hätte gedacht, dass dieser Fehler "undefined Bezeichner" und nicht "nicht deklarierte Bezeichner" wäre? – lfgtm
Es scheint wie eine seltsame Diagnose (obwohl das Problem nicht Verknüpfung ist also Ihre vorgeschlagene Alternative ist nicht ganz richtig) –