Questo problema è riproducibile nel g ++ prima di -std=c++14
. Viene generato un errore di collegamento a causa di evidenziato const
mostrato nei seguenti codici. Scompare se RHS const
viene rimosso.Errore di collegamento dovuto alla costanza dell'array di puntatori in C++ 03/C++ 11
/* main.cpp */
const char* const arr[2] = {"Hello", "World"};
// ^^^^^
int main() {}
e
/* foo.cpp */
extern const char* const arr[2];
// ^^^^^
const char* foo() { return arr[0]; }
Durante la compilazione: g++ [-std=c++11] main.cpp foo.cpp
, dà errore seguente collegamento:
In function `foo()': undefined reference to `arr'
Si tratta di un bug del compilatore o di una limitazione di linguaggio/funzione?
'variabili const' a portata namespace [sono implicitamente' static'] (http://stackoverflow.com/questions/33402177/const-global-variable-in-namespace), a meno che non si aggiunge 'extern'. Non sono sicuro del perché il comportamento cambi con '-std = C++ 14'. – Quentin
Non dovrebbe 'extern const char * const arr [2];' essere in un file di intestazione che include sia 'main.cpp' che' foo.cpp'? – NathanOliver
@Quentin Non sono sicuro del motivo per cui OP dice pre C++ 14, g ++ 5.1.0 produce errore in qualsiasi modalità (C++ 14 C++ 17), il tuo commento dovrebbe essere la risposta – Slava