Dieses Problem ist in der G ++ vor -std=c++14
reproduzierbar. Ein Verbindungsfehler wird aufgrund der hervorgehobenen const
in den folgenden Codes generiert. Es verschwindet, wenn die RHS const
entfernt wird.Verknüpfungsfehler aufgrund der Konstanz des Zeigerarrays in C++ 03/C++ 11
/* main.cpp */
const char* const arr[2] = {"Hello", "World"};
// ^^^^^
int main() {}
und
/* foo.cpp */
extern const char* const arr[2];
// ^^^^^
const char* foo() { return arr[0]; }
Beim Kompilieren: g++ [-std=c++11] main.cpp foo.cpp
gibt es folgende Verknüpfungsfehler:
In function `foo()': undefined reference to `arr'
Ist es ein Compiler Fehler oder eine Sprache Begrenzung/Funktion?
'const' Variablen im Namensraum scope [sind implizit' static'] (http://stackoverflow.com/questions/33402177/const-global-variable-in-namespace), es sei denn, Sie fügen 'extern' hinzu. Ich bin mir nicht sicher, warum sich das Verhalten mit '-std = C++ 14' ändert. – Quentin
Sollte 'extern const char * const arr [2];' in einer Header-Datei sein, die sowohl 'main.cpp' als auch' foo.cpp' enthalten? – NathanOliver
@Quentin Ich bin mir nicht sicher, warum OP sagt vor C++ 14, erzeugt g ++ 5.1.0 Fehler in jedem Modus (C++ 14 C++ 17), sollte Ihr Kommentar die Antwort sein – Slava