2
我只是想避免警告(沒有編譯器抑制),但不想添加一些包括我的文件。這裏是我的代碼:什麼是協議前向聲明的警告?
@protocol MyProto;
// ...
Protocol *p = @protocol(MyProto);
這裏警告我:
@protocol is using a forward protocol declaration of MyProto [-Wat-protocol]
我只是想避免警告(沒有編譯器抑制),但不想添加一些包括我的文件。這裏是我的代碼:什麼是協議前向聲明的警告?
@protocol MyProto;
// ...
Protocol *p = @protocol(MyProto);
這裏警告我:
@protocol is using a forward protocol declaration of MyProto [-Wat-protocol]
使用文字協議(@protocol
)需要鏈接到在編譯時的協議,這需要編譯器看到的定義協議。
我不明白你爲什麼不願意「添加一些包含到我的文件」。包含頭文件在使用該事件的實現文件中定義某些內容是非常正常的。不應該有缺點。
如果你想在運行時從字符串查找協議,你可以做類似NSProtocolFromString(@"MyProto")
。
沒有選擇。在定義類型之前,您不能在代碼中使用類型。這也適用於類。 – Avi
@Avi看起來像'Protocol * p'將是零,以防MyProto協議在運行時不存在?也許這是什麼警告信息? – k06a
不是。警告意味着它的含義。在定義它之前,您正在使用一種類型。編譯器警告你,它不能對協議的使用進行類型檢查,因爲它不知道該協議包含什麼。 – Avi