2012-06-12 45 views
6

Tôi đã thử các dòng sau:
static const const char* values[];
Nhưng tôi nhận được cảnh báo sau đây về VC++ C4114 cảnh báo: cùng loại vòng loại sử dụng nhiều lần.
Tuyên bố chính xác là gì?

chỉnh sửa:
Mục đích là để tạo ra một mảng bất biến của chuỗi cLàm thế nào để tạo ra một mảng const tĩnh của const char *

+0

Những gì bạn muốn để tạo ra? Một mảng các con trỏ liên tục đến các ký tự không đổi? –

Trả lời

13

Bạn đã viết const const thay vì static const char* const values[]; (nơi bạn xác định con trỏ và các giá trị cơ bản như const)

Ngoài ra, bạn cần phải khởi tạo nó:

static const char* const values[] = {"string one", "string two"};

+0

+1, Nhưng, việc khởi tạo phụ thuộc vào ngữ cảnh, nếu nó là thành viên 'tĩnh' của một lớp (tôi đoán) thì không khởi tạo có thể được thực hiện trong tuyên bố ... –

+0

Tôi có hiểu chính xác không, const đầu tiên dành cho chuỗi và chuỗi thứ hai cho mảng đó? – Tommy

+7

Để làm rõ từ khóa 'const':' '' 'luôn liên quan đến" mục "còn lại. Ngoại lệ của điều này là, khi const là từ đầu tiên trong biểu thức, sau đó nó liên quan đến mục bên phải nó. Vì vậy, để được siêu chính xác, người ta sẽ xác định chuỗi là 'static char const * const values ​​[]', có thể được đọc từ phải sang trái: các giá trị là một mảng các con trỏ const để const ký tự và tất cả điều này là tĩnh. – AquilaRapax

4

Hãy thử

static const char* const values[]; 

Ý tưởng là để đưa hai const s ở hai bên của *: bên trái thuộc về char (ký tự không đổi), bên phải thuộc về char* (hằng số con trỏ đến ký tự)

+2

Như một điều này cũng giống như 'static char const * const values ​​[]' – Dennis

Các vấn đề liên quan