[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