이 문제는 -std=c++14
이전의 g ++에서 재현 가능합니다. 링크 오류는 아래 코드에 표시된 const
강조 표시로 인해 생성됩니다. RHS const
이 제거되면 사라집니다.C++에서 포인터 배열의 constance로 인한 연결 오류 03/C++ 11
/* main.cpp */
const char* const arr[2] = {"Hello", "World"};
// ^^^^^
int main() {}
및 컴파일하는 동안
/* foo.cpp */
extern const char* const arr[2];
// ^^^^^
const char* foo() { return arr[0]; }
: g++ [-std=c++11] main.cpp foo.cpp
, 그것은 다음과 부여합니다 연결 오류 :이 컴파일러의 버그 또는 언어 제한/기능
In function `foo()': undefined reference to `arr'
인가?
쿠엔틴에 의해 발견으로
'extern '을 추가하지 않으면 네임 스페이스 범위 [암시 적으로'static'] (http://stackoverflow.com/questions/33402177/const-global-variable-in-namespace)에서'const' 변수가 사용됩니다. 왜'-std = C++ 14'로 동작이 바뀌는 지 모르겠습니다. – Quentin
'main.cpp'와'foo.cpp'가 모두 포함하는 헤더 파일에'extern const char * const arr [2];가 없어야합니까? – NathanOliver
@Quentin 왜 OP가 pre C++ 14라고 말하는지 잘 모르겠다. g ++ 5.1.0은 어떤 모드 (C++ 14 C++ 17)에서 에러를 발생 시키지만, 여러분의 코멘트는 대답이어야한다. – Slava