2010-05-15 24 views
10

sorun C dosyası için tasarlanmış bir başlık dosyası kullanır ++ kod C yazma yaşıyorum gibi anahtar kelime sınıfını kullanın. Özellikle, başlık dosyası değişken adı olarak adlandırılan sınıfı kullanılır: Sınıf anahtar kelime olarak alınmaz olarakC bir değişken adı ++

int BPY_class_validate(const char *class_type, PyObject *class, PyObject *base_class, BPY_class_attr_check* class_attrs, PyObject **py_class_attrs); 

Bu C çalışır ancak C++, sınıftır. Yine de bu başlık dosyasını bir C++ dosyasına ekleyebilir miyim, yoksa şanstan mı kurtulurum?

Teşekkür ederiz.

+0

, daha fazla sorun için hazır olun. Örneğin, eğer bu linke bağlanmak istediğiniz bir C kütüphanesi ise, tüm bildirimler 'extern' C '' ye sarılmalıdır, böylece linker, unmangled sembolleri aramaya ihtiyaç duyduğunu bilir. – sbi

+0

Bir "C" extern içine #include sarmak derleyici hala bir uygun atar. Aaa'nın numarasını seninkilere dahil etmeli miyim? –

+0

Bunun bir Python başlığı olduğunu anladım. Ben ne için kullanıldığını kullandığınız başlık ve hiçbir fikrim yok, ama sen http://www.boost.org/doc/libs/1_43_0/libs/python/doc/index.html biliyoruz? – sbi

cevap

9

deneyin bir şey: (Makefile'a kullanarak) sorunlara neden, ama belki değer bir atış

alternatif olabilir

#define class class_variable 
// if class is only used in declarations, you can also do 
// #define class 
#include "c.h" 
#undef class 

:

python_.hpp: /usr/include/python.h 
    perl -pe 's/\Wclass\W//g' $< > [email protected] 
... 

#include "python_.hpp" 
+0

Çalıştı ... kütüphaneleri henüz bağlamadım, yine de teşekkürler. –

+0

@Leif iyi şanslar.Ayrıca, önceden işlenmiş dosyayı manuel olarak incelemek isteyebilir, sadece istenmeyen yan etkilerin olmadığından emin olunuz. – Anycorn

+1

Standart kütüphane başlıklarından herhangi birini kullanırsanız, bir anahtar kelimeye sahip bir makronun adını tanımlamasına izin verilmez (cf. http: // stackoverflow .com/sorular/2726204 /) c-önişlemci-ing algıladığına-a-anahtar kelime-it-standartlara uygun olduğunu. C bu bağlamda C++ 'den biraz daha hafiftir. –

3

Hep böyle başlığında Sen C++ olarak derlemek için başka bir şeyle 'sınıfı' yerine başlığını değiştirmeniz gerekir

+0

Bu, daha büyük bir kod deposunun parçası olduğundan, muhtemelen üstbilgi dosyasının kendisinde sakınmamalıyım. –

3

yılında C için spesifik bir deklarasyon ++ oluşturmak için #ifdef __cplusplus kullanabilirsiniz. Böyle

1

pratik bir konu olarak,' şanstan yoksun. "Sınıf" Bir değişken tanımlayıcı olarak kullanamazsınız, bir saklıdır kelime olduğunu.

Sana

#define class othername 

gibi, önişlemci hile yapabileceği varsayalım Ama bu kod kafa karıştırıcı yapacağız ve gerçek sınıfları kullanarak engellemek, çünkü gerçekten bu da saçma.

Sadece kabullenmesini ve parametrenin 'theClass' falan adlandırın. Bu deklarasyon ise

7

sadece, sonra değişken adları hiç önemli değil. Bunları tamamen kaldırabilir veya nasıl değiştirebileceğinizi değiştirebilirsiniz. deklarasyon sadece adını ve bir fonksiyon türünü tanımlar Bunun nedeni:

int BPY_class_validate(const char *, PyObject *, PyObject *, 
         BPY_class_attr_check*, PyObject **); 

Ama isimleri isterseniz (biraz daha açıklayıcı olması için), sadece sonunda bir alt atabilir ne varsa:

int BPY_class_validate(const char *class_type, PyObject *class_, 
         PyObject *base_class, BPY_class_attr_check* class_attrs, 
         PyObject **py_class_attrs); 

Bu, herhangi bir diğer kod kırmak olmaz. Bu kod, bir C++ derleyici tarafından çözümlenen üzere hazırlanan değilse

İlgili konular