[PyQt] SIP Bug: virtual function wrapped twice due to deep inheritance from base class and ABC

Demetrius Cassidy dcassidy36 at mass.rr.com
Tue Jun 22 01:44:03 BST 2010


Phil - have you seen this yet? Any comments?


Demetrius Cassidy wrote:
> 
> Basically I have a Listen() function in a derived class, that is also in
> the 
> base and ABC. For some reason sip ends up wrapping the same function twice
> (it 
> has a body in the ABC), even though it's a virtual function in all of the 
> derived classes. If I comment out this function in the ABC, everything
> works 
> fine, but otherwise I get a C2535 compiler error with Visual C++. 
>  
> Here is what sip comes up with: 
>  
> class sipPUDPSocket : public PUDPSocket 
> { 
>  
>     /* 
>      * There is a protected method for every virtual method visible from 
>      * this class. 
>      */ 
>  protected: 
>     PBoolean Listen(unsigned,WORD,PIPSocket::Reusability); 
>     /*more wrapped functions*/ 
>     PBoolean Listen(unsigned,WORD,PIPSocket::Reusability); // <--
> duplicate 
> function 
> }; 
>  
> C++ nmake errors: 
>  
> sippyptlibPTCPSocket.cpp 
> .\sippyptlibPTCPSocket.cpp(121) : error C2535: 'PBoolean 
> sipPTCPSocket::Listen(unsigned int,WORD,PSocket::Reusability)' 
> : member function already defined or declared 
>         .\sippyptlibPTCPSocket.cpp(102) : see declaration of 
> 'sipPTCPSocket::Listen' 
>  
>  
> .\sippyptlibPTCPSocket.cpp(506) : error C2084: function 'PBoolean
> sipPTCPSocket: 
> :Listen(unsigned int,WORD,PSocket::Reusability)' already has a body 
>         .\sippyptlibPTCPSocket.cpp(102) : see previous definition of
> 'Listen' 
>  
>  
> Basic code structure based on what I am wrapping - note that I only
> included the 
> offending function here, as it would be too much code to include
> everything. 
>  
> typedef bool PBoolean; 
>  
> class PTCPSocket : PIPDataGramSocket 
> { 
>  public: 
>   virtual PBoolean Listen(unsigned int, WORD, PSocket::Reusability); 
> } 
>  
> class PIPDataGramSocket : PIPSocket 
> { 
>   protected: 
>     PIPDataGramSocket(); 
> } 
>  
> class PIPSocket : PSocket 
> { 
>  public: 
>   virtual PBoolean Listen(unsigned int, WORD, PSocket::Reusability); 
> } 
>  
> class PSocket /Abstract/ 
> { 
>   public: 
>     /// Flags to reuse of port numbers in Listen() function. 
>     enum Reusability { 
>       CanReuseAddress, 
>       AddressIsExclusive 
>     }; 
>  
>   virtual PBoolean Listen(unsigned int, WORD, PSocket::Reusability); // 
> commenting this function out fixes this problem 
>  
>  protected: 
>     /*This function calls os_socket() with the correct parameters for the 
>        socket protocol type. 
>      */ 
>     virtual PBoolean OpenSocket() = 0; 
>  
> }; 
>  
> -- 
> Regards, 
>  -Demetrius Cassidy 
> 
> 

-- 
View this message in context: http://old.nabble.com/SIP-Bug%3A-virtual-function-wrapped-twice-due-to-deep-inheritance-from-base-class-and-ABC-tp28936011p28953735.html
Sent from the PyQt mailing list archive at Nabble.com.



More information about the PyQt mailing list