ㄌㄐ@你的水潤餅大使
還以為我沒 forward declaration 結果只是我打錯字幹
花我十分鐘
ㄌㄐ@你的水潤餅大使
不過搞不清楚什麼 scope 下宣告 func(struct foo[]) 這樣才不會 type incomplete
ㄌㄐ@你的水潤餅大使
還是那其實只是因為我之前打錯字的關係
ㄌㄐ@你的水潤餅大使
不行ㄟ
ㄌㄐ@你的水潤餅大使
為什麼 好奇妙ㄛ
ㄌㄐ@你的水潤餅大使
我一直以為只有傳二維 struct array 要定義第二層的大小,因為 compiler 會不知道這個陣列要給多大
背脂拉麵
我覺得是你打錯ㄅ
ㄌㄐ@你的水潤餅大使
JaidTw: 沒欸 我這是改好之後實驗ㄉ
ㄌㄐ@你的水潤餅大使
我 include 別ㄉ header file 到另一個 header file

typedef strcut User user;
int readline(char* buffer, int fd, user user_list[]);

這樣會 type incomplete
ㄌㄐ@你的水潤餅大使
可是改成
int readline(..., user* user_list);
編譯器就不會不知道這個型別要多大的空間
背脂拉麵
我還是覺得是你寫錯ㄟ
ㄌㄐ@你的水潤餅大使
JaidTw: 就只有這兩行欸
ㄌㄐ@你的水潤餅大使
我看很久ㄌ
背脂拉麵
你確定你有include對嗎 你宣告一個實體不是指標的user看看
ㄌㄐ@你的水潤餅大使
我改成我原先寫ㄉ
https://images.plurk.com/LIPpYCy8B1iaEpjJii2r5.png https://images.plurk.com/65UOYbjycI41IkMqrwb3Wd.png https://images.plurk.com/6o3iHeQXpemECjifZaNIZT.png

宣告不是指標的只有在最初 user 被宣告的那個 header file 裡面ㄉ function 是可以被理解ㄉ
ㄌㄐ@你的水潤餅大使
user.h 內部宣告 user list[] 為參數的話不會出錯
在這之外不能這樣寫
ㄛ順便講一下我ㄉ gcc 是 7
ㄌㄐ@你的水潤餅大使
而且 include 錯的話不會是這ㄍ錯誤ㄅ,會直接說 unknown type
或是 type conflict?
背脂拉麵
好妙喔 不過基本上你有typedef不會是unknown type,他resolved不到user的定義就會是incomplete type
ㄌㄐ@你的水潤餅大使
我也是第一次知道這ㄍ現象,神奇
我只是懶ㄉ再用 list 這次就叫一個 struct array 結果翻車
背脂拉麵
我試了一下用g++, clang++是可以過的 不確定是不是標準定義不太一樣
ㄌㄐ@你的水潤餅大使
(woot)
oToToT@(>▂<)
C 真的好難寫 QAQ
背脂拉麵
oToToT@(>▂<) : 對...對ㄅ起我ㄅ會C
載入新的回覆