2016-04-14 16 views
6

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.

+0

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. –

cevap

4

Hep Bildiricisi-id parenthesize Visual Studio kullanıyorum:

int32_t (::motek_mds_enable_data_is_enabled)(const Data* a_Data) { ... } 
// ^        ^