On Thu, 1 Jul 2010 17:53:23 -0700 (PDT), Demetrius Cassidy <[email protected]> wrote: > Phil, > > It's not code specific to that class. It's due to the deep inheritance > tree. > You should be able to run my test code and get the same results. > > Basically to sum it up: > > PTCPSocket <- PIPDataGramSocket <- PIPSocket <- PSocket (ABC) > > PTCPSocket, PIPSocket and PSocket all define a virtual function called > 'Listen'. > Commenting 'Listen' out from PSocket, and SIP does not include the function > twice. > Listen is NOT a pure virtual function in the ABC, it has a body. > Listen is fully defined in PTCPSocket, and the other classes except > PIPDataGramSocket.
The error appears in PUDPSocket but you don't even mention that class. Where does it fit in the inheritance tree? Phil > Phil Thompson-5 wrote: >> >> On Sat, 19 Jun 2010 10:27:55 -0700 (PDT), Demetrius Cassidy >> <[email protected]> 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. >> >> But you at least need to include the definition of PUDPSocket. >> >>> 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; >>> >>> }; >> >> Phil >> _______________________________________________ >> PyQt mailing list [email protected] >> http://www.riverbankcomputing.com/mailman/listinfo/pyqt >> >> _______________________________________________ PyQt mailing list [email protected] http://www.riverbankcomputing.com/mailman/listinfo/pyqt
