- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我可能把这个复杂化了..
我正在尝试在 Arduino 上用 C 语言为嵌入式应用程序制作一个相当可重用的分层菜单系统。我有结构来表示不同类型的菜单项,包括那些子菜单,以及这些菜单项的 union 是一个通用的菜单项。菜单条目数组是菜单的一个级别。子菜单项具有指向另一个菜单项数组的指针。
问题是,子菜单条目是 union 的成员,因此需要在 union 之前定义它。但它有一个指向该 union 实例数组的指针,这会导致编译错误,因为该 union 尚未定义。
是否有处理此问题的类型安全方法,或者我在子菜单条目中的指针是否必须为 void*?
Mã số:
typedef enum {UI_STATE_HOME, UI_STATE_MENU, UI_STATE_DIALOG} te_UIState;
typedef enum {UI_ENTRY_SUBMENU, UI_ENTRY_NUMERIC_INT, UI_ENTRY_NUMERIC_FLOAT, UI_ENTRY_BOOL, UI_ENTRY_DISCRETE} te_UIEntryType;
/* Typedefs for the different types of entry
*
*/
Kiểu định nghĩa cấu trúc {
char* entryName; // pointer to one of our string entries, eg MNU_Light
te_UIEntryType entryType;
} tsEntry;
Kiểu định nghĩa cấu trúc {
char* entryName;
te_UIEntryType entryType;
int (* finalIntHandler)(int selectedValue); //The function that should be called when a number has been selected
int (* initialIntValue) (); //The function that should be called to obtain the starting value for the selector
} ts_EntryInt;
Kiểu định nghĩa cấu trúc {
char* entryName;
te_UIEntryType entryType;
int (* finalIntHandler)(float selectedValue);
float (* initialSingleValue) ();
} ts_EntrySingle;
Kiểu định nghĩa cấu trúc {
char* entryName;
te_UIEntryType entryType;
int (* finalIntHandler)(bool selectedValue);
bool (* initialBoolValue) ();
} ts_EntryBool;
Kiểu định nghĩa cấu trúc {
char* entryName;
te_UIEntryType entryType;
int (* handler)();
char* (* optionalEntryNamePtrFunction)(); //If this points to a function, it'll be called to determine what text to display as the entry name.
// This is for things like enable/disable where the text changes depending on the present state.
} ts_EntryDiscrete;
Kiểu định nghĩa cấu trúc {
char* entryName;
const te_UIEntryType entryType = UI_ENTRY_SUBMENU;
void *entries[];
} ts_EntrySubmenu;
typedef union
{
tsEntry entry;
ts_EntryInt entryInt;
ts_EntrySingle entrySingle;
ts_EntryBool entryBool;
ts_EntryDiscrete entryDiscrete;
ts_EntrySubmenu entrySubmenu;
} tuEntry;
câu trả lời hay nhất
您需要转发声明tuEntry
以便您可以在ts_EntrySubmenu
中使用它。您需要为该 union 提供一个标记名称,以便稍后引用。
此外,在 C 中定义时,您不能将结构或 union 的字段初始化为默认值。您需要在每个相关实例中设置该字段。
typedef union tuEntry tuEntry;
Kiểu định nghĩa cấu trúc {
char* entryName;
const te_UIEntryType entryType; // no default value
tuEntry *entries[];
} ts_EntrySubmenu;
union tuEntry
{
tsEntry entry;
ts_EntryInt entryInt;
ts_EntrySingle entrySingle;
ts_EntryBool entryBool;
ts_EntryDiscrete entryDiscrete;
ts_EntrySubmenu entrySubmenu;
};
关于c - union 成员如何拥有指向 union 实例的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54908601/
kiểm tra = (hàm(){var key = 200; trả về {getKey : hàm(){return key} }; })(); kiểm tra.
Tôi xin lỗi nếu câu hỏi này có thể tiếp tục được hỏi nhưng tôi đã tìm kiếm và không tìm thấy đủ câu trả lời. Làm cách nào để vô hiệu hóa tính kế thừa của các thành viên/phương thức công khai nếu họ đang truy cập vào các thành viên/trường riêng tư? Vì vậy hãy xem xét điều này: publici
Làm rõ quan trọng: một số người bình luận dường như nghĩ rằng tôi đã sao chép từ công đoàn. Nhìn kỹ vào memcpy, nó sao chép từ một địa chỉ uint32_t cũ, không có trong liên kết. Ngoài ra, tôi đang sao chép (thông qua memcpy)
Spinner thường chỉ hiển thị một chuỗi, trường hợp tôi muốn gán IDpersonne và Name thì spinner phải cho tôi biết tên. Khi tôi nhận được mục đã chọn, tôi phải lấy ID. Tôi nên làm gì? Câu trả lời hay nhất Tôi cho rằng bạn đã lên lịch cho dự án của mình
Các thể hiện của lớp A là thành viên công khai của lớp B. Các instance của lớp B cũng là thành viên public của A. Trong trường hợp nào việc triển khai như vậy có thể cần thiết? Ý tôi là có một hoặc nhiều kịch bản tiêu chuẩn yêu cầu kiểu triển khai này không? Chi tiết cụ thể hơn: Tôi có
Làm cách nào để thiết lập web.config của tôi để sử dụng xác thực biểu mẫu, đặt nhà cung cấp thành viên thành ActiveDirectoryMembershipProvider và sử dụng kiểm soát đăng nhập tích hợp. Bằng cách này tôi có thể sử dụng một đối tượng sự kiện hợp lệ
Câu hỏi này đã có câu trả lời: Các phương thức trong giao diện Java có nên được khai báo có hoặc không có công cụ sửa đổi truy cập công khai không?
Vì vậy, theo định nghĩa, các số riêng tư trong một lớp được đặt trước tên lớp khi được tuần tự hóa. Đây là một vấn đề đối với tôi, tôi muốn có thể tuần tự hóa/lưu/giải tuần tự hóa một đối tượng chính xác, nhưng những gì php làm là cung cấp cho tôi một tên lớp khác + va
Tôi thực hiện một thành viên? Các hàm trong clojure như sau: (defn member? [item seq] (cond (empty? seq) false (= item (first
Vấn đề của tôi ở đây dường như luôn là việc sử dụng hàm. Nó vẫn làm tôi bối rối! Trong bài tập sách giáo khoa này, tôi được yêu cầu chuyển một cấu trúc theo giá trị, sau đó điều chỉnh nó và chuyển nó theo tham chiếu. Ban đầu tôi thiết kế mã để thực hiện tất cả công việc trong main. Bây giờ tôi đang chuyển giá trị. Vì vậy tôi đã thêm thư mới
Vì vậy, tôi có các biến Danh sách tệp, hình ảnh = new List(); chuỗi rootStr; và chức năng luồng này riêng tư tĩnh int[] thread_searc
Tôi còn khá mới với các mẫu C++ và đang cố gắng tìm ra một số chuyên môn về mẫu. Tôi đang sử dụng các mẫu để triển khai một số cấu trúc dữ liệu có liên quan: bộ lọc nở (dựa trên mảng bit) cho các truy vấn hiện diện/vắng mặt theo xác suất và bộ lọc nở đếm (với một mảng số nguyên) cho các truy vấn phong phú. Tôi chưa bao giờ
Ví dụ: trong java tôi đã khai báo và khởi tạo một JButton ở lớp bên ngoài và lớp bên trong và tôi quyết định ẩn nó trong một số trường hợp, đây có phải là cách thực hành lập trình an toàn không? Câu trả lời hay nhất Toàn bộ mục đích của các lớp bên trong là chúng có quyền truy cập vào lớp bên ngoài bao quanh lớp bên trong. Địa điểm
Tôi có một lớp giao tiếp bằng thư viện: class Topic { Topic(Type T, String name });
Tôi có đoạn mã sau trong hai tệp riêng biệt. gói động vật; lớp công khai Ếch { protected void ribbit() { Syste
Tôi có một danh sách điểm số. Bằng cách sử dụng những thứ này, tôi cần trích xuất các giá trị từ một tập hợp được sắp xếp lại. Tôi biết tôi có thể sử dụng zrangebyscore - nhưng nếu điểm trong danh sách tôi cung cấp không liên tiếp thì sao? Trong trường hợp này tôi không thể dựa vào zrangeby
Tôi đã say mê viết mã C# trong vài năm qua và bây giờ tôi quay lại với C++ và nhận ra rằng tôi đang gặp rắc rối với một điều gì đó lẽ ra đơn giản. Tôi đang sử dụng thư viện của bên thứ ba có tên DarkGDK cho gamedev (bất kỳ lệnh nào có tiền tố db), nhưng
Tôi đang theo dõi các bài giảng SICP của Brian Harvey trên trang web UC Berkeley từ năm 2011. .Anh ấy đang dạy lớp này bằng trình thông dịch STk và tôi đang sử dụng nó với DrRac
Trong mã này, tại sao tôi không thể truy cập các trường riêng tư của lớp mình khi quá tải toán tử? (Xin lưu ý rằng đây chỉ là MRE, không phải mã hoàn chỉnh) mẫu lớp Frac mẫu Frac o
Trong lớp không gian tên được đặt tên, tôi khai báo một lớp (nằm trong không gian tên chung) là một người bạn. Tuy nhiên, lớp sau không thể truy cập các thành viên riêng tư của lớp trước. Tại sao lại thế này? Có cách nào để giải quyết điều này? Không gian tên Bob.h AB
Tôi là một lập trình viên xuất sắc, rất giỏi!