Sự cố này được sao chép trong g ++ trước -std=c++14
. Lỗi liên kết được tạo do được đánh dấu là const
được hiển thị trong các mã bên dưới. Nó biến mất, nếu RHS const
bị xóa.Lỗi liên kết do độ chụm của mảng con trỏ trong C++ 03/C++ 11
/* main.cpp */
const char* const arr[2] = {"Hello", "World"};
// ^^^^^
int main() {}
và
/* foo.cpp */
extern const char* const arr[2];
// ^^^^^
const char* foo() { return arr[0]; }
Trong khi biên soạn: g++ [-std=c++11] main.cpp foo.cpp
, nó mang lại sau lỗi khi liên kết:
In function `foo()': undefined reference to `arr'
Có một lỗi biên dịch hoặc một giới hạn ngôn ngữ/Tính năng?
'biến' const ở phạm vi không gian tên [là hoàn toàn 'tĩnh'] (http://stackoverflow.com/questions/33402177/const-global-variable-in-namespace), trừ khi bạn thêm' extern'. Tôi không chắc chắn lý do tại sao hành vi thay đổi với '-std = C++ 14'. – Quentin
Không nên 'extern const char * const arr [2];' nằm trong một tệp tiêu đề mà cả 'main.cpp' và' foo.cpp' đều bao gồm? – NathanOliver
@Quentin Tôi không chắc tại sao OP lại nói trước C++ 14, g ++ 5.1.0 tạo lỗi ở bất kỳ chế độ nào (C++ 14 C++ 17), nhận xét của bạn phải là câu trả lời – Slava