Từ khóa static
không phải là một phần của loại, tùy thuộc vào ngữ cảnh đó là bộ lưu trữ hoặc bộ định danh phạm vi và không ảnh hưởng đến loại nào. Do đó, nó không thể được sử dụng như là một phần của định nghĩa kiểu, đó là lý do tại sao nó không hợp lệ ở đây.
Một typedef là định nghĩa kiểu, tức là bạn đang nói 'tên này' bây giờ đề cập đến 'loại này', tên bạn đặt phải là số nhận dạng như được xác định theo tiêu chuẩn ngôn ngữ, loại phải là loại specifier, tức là một kiểu đã được đặt tên, hoặc kiểu cơ sở hoặc typedef'd, một struct, union, class, hoặc enum specifier, với các loại có thể có, tức là const, hoặc volatile.
Từ khóa tĩnh tuy nhiên không thay đổi loại, nó nói một cái gì đó về đối tượng, (nói chung, không phải trong ý nghĩa OOP.) Ví dụ: nó là biến được đặt trong bộ nhớ tĩnh, không phải là loại.
Có vẻ như bạn đang cố gắng sử dụng một typedef như một vĩ mô, ví dụ:
#define MYINT static int
Cả typedef và tĩnh là lớp lưu trữ trong các ngôn ngữ (đúng đúng đối với C; Tôi tin rằng nó cũng đúng đối với C++). Bạn chỉ có thể có một lớp lưu trữ trong một khai báo đơn - bạn có hai trong ví dụ của bạn, do đó lỗi. –
+1. "Trình định danh typedef được gọi là" bộ chỉ số lớp lưu trữ "cho chỉ tiện lợi cú pháp;" – dirkgently