Bir C++ kitaplığı etrafında bir C sarıcı oluşturma aşamasındayım. Bunu yaparken yapılacak genel bir hata, bir sebeple uyuşmayan bir işlev bildirimi ve tanımına sahip olmaktır (yazım hatası, yeniden adlandır, argüman eklenmiş/kaldırılmış vb.). isimler, fakat bu fonksiyonlar için kapsam eksikliği eşleşmeyenGenel ad alanı kapsamı işlevsellik tanımında
// enabledata.h
MDS_C_API const char* motek_mds_enable_data_get_enable_command_name();
// enabledata.cpp
const char* motek_mds_enable_data_enable_command_name() { ... }
, bu hataları derleme herhangi neden olmaz ve ancak çok sonraları satır aşağı görünecektir: Örneğin
bağlantı hatası olarak.
Öyle gibi küresel kapsam operatörünü kullanarak beni bu hataları bulmanıza yardımcı olmak için derleyici istiyorum: function henüz ilan edilmemiş ise
const char* ::motek_mds_enable_data_get_disable_command_name() { ... }
Bu şimdi olan bir derleme hatası olarak görünecektir tam olarak ne istediğimi. işlev typedef döndüğünde
Ancak bu işe yaramazsa:
int32_t ::motek_mds_enable_data_is_enabled(const Data* a_Data) { ... }
Bu kapsamda, olarak int32_t
kullanmak amacıyla sonuçlanacak hatayla ders sonuçlarının:
left of '::' must be a class/struct/union
Bu işi yapmanın herhangi bir yolu var mı? Daha iyi alternatifler de elbette açıktır.
Şu anda 2015 Güncelleme 2.
ben 'decltype (int32_t()) :: motek_mds inanıyorum ... '' çalışmalı (dönüş türünü '' '' 'yutmayan '' basit-tip-belirleyici '' yapar, fakat bunu test etmek için zamanınız yoktur. öneri her neyse daha az çirkin. –