2016-07-21 16 views
1

Ich versuche, Cython zu verwenden, um einen Wrapper für meine C++ - Dienstprogramme bereitzustellen. Eine dieser Funktionen, auf die ich zugreifen möchte, ist ein Accessor, der eine Enumeration basierend auf dem Dateityp zurückgibt.Cython __pyx_r kann in dieser Funktion nicht initialisiert werden

Hier ist, wie ich die Funktion in cython neu zu definieren:

cdef extern from "reader.h" namespace "magic_number": 
    enum mcr_magic_number_t:                    
     MDI = 0                        
     EOT                         
     RV                         
     UNKNOWN 

und dann in meiner reader.pxd Datei Ich habe

cpdef mcr_magic_number_t magic_number(self) 

und dann in meiner reader.pyx Datei Ich habe

cpdef mcr_magic_number_t magic_number(self):    
    """           
    :return: the magic_number enum      
    :rtype: mcr_magic_number_t       
    """             
    return self.thisptr.magic_number() 

Jetzt, wenn ich gehe, um dies zu kompilieren, bekomme ich eine Warnung

warning: ‘__pyx_r’ may be used uninitialized in this function

Wer weiß, wie man am besten ist, dies zu umgehen? Ich habe versucht, nach Lösungen auf Google zu suchen, aber alles, was ich bekam, waren Seiten anderer Leute, die die gleiche __pyx_r Warnung melden. Vielleicht gibt es eine Möglichkeit, einen Standardwert festzulegen oder sicherzustellen, dass er immer in Cython initialisiert wird.

+0

Ich vermute, es ist kein Thema. Wenn Sie jedoch im Zweifelsfall auf das C schauen, um zu sehen, unter welchen Umständen es nicht initialisiert wird. Leider ist es nicht möglich, dass sich jemand anders umsehen kann, ohne zu wissen, was "self.thisptr" ist. – DavidW

Antwort

0

Try self.thisptr für Nicht-NULL-Wert überprüft:

if <void*>self.thisptr != NULL: 
    return self.thisptr.magic_number()